Считается ли разыменование NULL-указателя неопределенным или неопределенным поведением?

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

Тем не менее, я недавно видел выступление Чарльза Бэй в 2016 году под названием:
Перестановка инструкций везде: правило «как будто» в C ++ и роль последовательности.

В 37:53 он показывает следующее:

Условия C ++

Неопределенный Поведение: отсутствие ограничений
(порядок инициализации глобалов)

Неопределенные Поведение: нарушение ограничений
(разыменование NULL
указатель)

Теперь у меня противоречивая информация.
Это была опечатка? Что-нибудь изменилось?

2

Решение

Примеры связаны с неправильными вещами. Независимо от того, какую версию стандарта C ++ вы предполагаете (то есть в этом отношении ничего не изменилось в рамках стандартов).

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

Порядок инициализации глобальных переменных является примером неуказанного поведения (стандарт гарантирует, что все глобальные глобальные переменные будут инициализированы [это ограничение на то, как инициализируются глобальные глобальные переменные), но порядок не указан).

0

Другие решения

Это неопределенное поведение.

От 8.3.2 Ссылки стандарта C ++ 11 (выделение мое):

5 … [ ЗаметкаВ частности, пустая ссылка не может существовать в четко определенной программе, потому что единственный способ создать такую ​​ссылку — привязать ее к «объекту», полученному разыменование нулевого указателя, что вызывает неопределенное поведение. Как описано в 9.6, ссылка не может быть привязана непосредственно к битовому полю. —конечная нота ]

2

По вопросам рекламы [email protected]