Является ли Dereference Null Pointer UB в C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли Dereference Null Pointer UB в C ++ 20?

Сообщение Anonymous »

Я начинал с исследования вопроса "IS & (t*) null)-> member ub в c?". Это пример в моем учебнике, в котором введена старая реализация Offsetof .
Я знаю, что смещение не может быть реализовано в C ++ сейчас (Cppreference Page).

Но после прочтения некоторых проблем C ++ CWS, моя проблема становится как «Dereference Null Pointer UB?».

Также, я думаю, они не будут Изменил реализацию Offsetof from & ((t*) null)-> member в C убью любую причину, но я не знаю, почему, может быть, потому что это UB? Но я не нашел термин «сказал &» (t*) null)-> member -UB в C. Для C ++, я думаю, что это UB, если это не стандартный тип макета.
В начале я подумал, что будет явно указанный термин, как «Dereference Null Pointer - это ub»

Однако, когда я в глубже, я обнаружил, что это сложнее, чем Я подумал.

После прочтения большого ответа статьи Stackoverflow я обнаружил, что ответ не унифицирован. , в некоторых сообщениях говорилось, что это не указано. Ответ в C ++ Access State Memports с использованием NULL Pointer.

Для этих сообщений говорится, что он не указан, они сказали, что он не был явно указан в стандарте.

Для этих постов. Сказали, что это UB, они сказали, что проблема не была включена в стандарт, так что это все еще UB. Кроме того, они дают термин о «если неверное значение было назначено указателю, поведение негального * не определено.».
Пример в Stackoverflow выше: < /p>

Код: Выделить всё

#include 
class demo {
public:
static void fun()
{
std::cout fun();
std::cout a;
return 0;
}
< /code>
Примерно их причина сказать, что это четко определенное: < /p>
[list]
[*]E1->E2
эквивалент ( *(e1)). e2
[*] Таким образом, если *d; является законным, тогда d-> fun ()

Подробнее здесь: https://stackoverflow.com/questions/768 ... -ub-in-c20
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»