Почему разыменование нулевого указателя является неопределенным поведением? - PullRequest
22 голосов
/ 22 июля 2011

Согласно ISO C ++, разыменование нулевого указателя является неопределенным поведением.Мое любопытство, почему?Почему стандарт решил объявить это неопределенным поведением?В чем причина этого решения?Зависимость от компилятора?Не кажется, потому что согласно стандарту C99, насколько я знаю, он четко определен.Машинная зависимость?Есть идеи?

Ответы [ 12 ]

0 голосов
/ 22 июля 2011

В соответствии с исходным стандартом C NULL может быть любым значением - не обязательно равно нулю .

В определении языка указывается, что для каждого типа указателя существует специальныйvalue - «нулевой указатель» - который отличается от всех других значений указателя и который «гарантированно сравнивает неравное с указателем на любой объект или функцию».То есть нулевой указатель нигде не указывает;это не адрес какого-либо объекта или функции

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

http://c -faq.com / нуль / null1.html )

0 голосов
/ 22 июля 2011

Потому что вы не можете создать нулевую ссылку.C ++ не позволяет этого.Поэтому вы не можете разыменовать нулевой указатель.

В основном он не определен, потому что нет логического способа его обработки.

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