В статье Википедии «Неопределенное поведение» есть раздел, показывающий, что это неопределенное поведение в C/C++:
Код: Выделить всё
int arr[4] = { 0, 1, 2, 3 };
int* p = arr + 5; // undefined behavior for indexing out of bounds
p = NULL;
int a = *p; // undefined behavior for dereferencing a null pointer
Когда вы выполняете int* p = arr + 5; вы увеличиваете значение указателя на 5 * sizeof(int), но этого не происходит. разыменование выполнено, а индексация массива отсутствует, так почему же это неопределенное поведение соответствует этому?
Подробнее здесь:
https://stackoverflow.com/questions/789 ... -the-array