Стандарт C++: разыменование Нулевого указателя для получения ссылки? [дубликат]

33
задан shoosh 28 April 2010 в 08:28
поделиться

5 ответов

Разыменование нулевого указателя является неопределенным поведением.

Фактически, стандарт называет именно эту ситуацию в примечании (8.3.2 / 4 «Ссылки»):

Примечание: в частности, пустая ссылка не может существовать в четко определенной программе, потому что единственный { {1}} способ создать такую ​​ссылку - привязать ее к «объекту», полученному разыменованием нулевого указателя, что вызывает неопределенное поведение.


Кстати: однажды я знаю, что указатель NULL может быть "разыменован" четко определенным способом, это как операнд для оператора sizeof , потому что операнд для sizeof на самом деле не вычисляется (поэтому разыменование никогда не происходит).

46
ответ дан 27 November 2019 в 18:28
поделиться
int& ref = *ptr;

Приведенное выше утверждение на самом деле ничего не разыменовывает. Так что проблем нет, пока вы не используете ref (который недействителен).

-2
ответ дан 27 November 2019 в 18:28
поделиться

Разыменование указателя NULL является неопределенным поведением. Перед разыменованием значения следует проверить, является ли оно NULL.

1
ответ дан 27 November 2019 в 18:28
поделиться

Для полноты это: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 говорит конкретно об этой проблеме.

1
ответ дан 27 November 2019 в 18:28
поделиться

Разыменование указателя NULL является явно неопределенным поведением в стандарте C++, поэтому то, что вы видите, зависит от реализации.

Копирую из 1.9.4 в проекте стандарта C++0x (в этом отношении он похож на предыдущие стандарты):

Некоторые другие операции описаны в настоящем международном стандарте как неопределенными (например, эффект разыменования нулевого указателя). [Примечание]: настоящий международный стандарт не накладывает никаких требований на поведению программ, которые содержат неопределенное поведение. - end note]

2
ответ дан 27 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: