представляет собой использование.

е говоря, считается ли следующий код неопределенным поведением?

int main()
{
    int *p = <some invalid pointer value>;
}

Для примера компиляции возьмите следующий код:

int main()
{
    int *p = new int;
    delete p; // Now p has an invalid pointer value.
    int *q = p; // UB?
}

Я провел некоторое исследование по этой теме, поэтому вот соответствующая информация, которую я нашел до сих пор:

Значение указателя (согласноcppreference) может быть одним из:

Указатель на объект или функцию;Указатель за концом объекта;Значение нулевого указателя;Недопустимое значение указателя.

Кроме того, согласно cppreference,

Направление через недопустимое значение указателя и передача недопустимого значения указателя в функцию освобождения имеют неопределенное поведение. Любое другое использование недопустимого значения указателя имеет поведение, определяемое реализацией.

Эта тема адрес некоторых использования недействительных указателей. В частности,этот ответ упоминаетОбоснование документа (C99), который имеет следующий параграф (раздел 6.3.2.3):

Независимо от того, как создается недопустимый указатель, любое его использование приводит к неопределенному поведению. Даже присваивание, сравнение с константой нулевого указателя или сравнение с самим собой в некоторых системах может привести к исключению.

Я не уверен, как обстоят дела с C ++, но я бы учел это, учитывая ответы в связанной ветке,использования неверные указатели приводят к неопределенному поведению. Обратите внимание, чтоназначение это не то же самое, чтоинициализация, поэтому я не уверен, что инициализация считается использованием.

Ответы на вопрос(1)

Ваш ответ на вопрос