Пока я не могу найти, как сделать вывод, что следующее:
int* ptr;
*ptr = 0;
не определено
Прежде всего, там 5.3.1 / 1 утверждается, что *
означает косвенное обращение, которое преобразует T *
в T
. Но это ничего не говорит о UB.
Затем часто цитируется 3.7.3.2/4, где говорится, что использование функции освобождения для ненулевого указателя делает указатель недействительным, а более позднее использование недействительного указателя - UB. Но в приведенном выше коде ничего не говорится об освобождении.
Как можно вывести UB в приведенном выше коде?