представляет собой использование.
е говоря, считается ли следующий код неопределенным поведением?
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 ++, но я бы учел это, учитывая ответы в связанной ветке,использования неверные указатели приводят к неопределенному поведению. Обратите внимание, чтоназначение это не то же самое, чтоинициализация, поэтому я не уверен, что инициализация считается использованием.