2016-10-08 13 views
2

Консенсус по вопросам stackoverflow говорит о том, что это неопределенное поведение.Вызывает разыменование указателя NULL, считающегося неопределенным или неопределенным поведением?

Однако, я недавно видел в 2016 году разговор Чарльза залива под названием:
Инструкция переупорядочения Везде:. C++ «As-If» Rule и роль последовательности

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

C++ Условия

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

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

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

+1

Это задница назад. Потерпеть неудачу! – Kaz

+2

Примеры должны быть заменены. Скорее всего, это опечатка! – Nawaz

+1

Как говорит Наваз. В стандарте не указывается полный порядок, в котором инициализируются глобальные/статистические данные, но он определяет, что они _are_ инициализированы (в некотором порядке _unspecified_). Разновидность нулевого указателя по-прежнему является неопределенным поведением. – Xeo

ответ

0

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

Выделение указателя NULL дает неопределенное поведение. Стандарт не определяет ограничения на то, что происходит в результате.

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

2

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

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

5 ... [Примечание: в частности, пустая ссылка не может существовать в хорошо так как единственным способом создания такой ссылки было бы привязать ее к «объекту», полученному , разыменованию нулевого указателя, что вызывает неопределенное поведение. Как описано в 9.6, ссылка не может быть привязана непосредственно к битовому полю. - конец примечания]

+1

Не существует ... это где-то еще в спецификации упоминалось, что * разыменование * nullptr - UB. – Nawaz

+0

@Nawaz, я нашел неопределенный бит поведения внутри * Примечание *. –

+0

Ну, это означает, что первая цитата здесь неактуальна (если это так, ее следует удалить из этого ответа). – Nawaz