Рассмотрим следующий код:
void populate(int *arr)
{
for(int j=0;j<4;++j)
arr[j]=0;
}
int main()
{
int array[2][2];
populate(&array[0][0]);
}
Было обсуждено это в местном сообществе, действительно ли код действителен или нет (я должен упомянуть его имя?). Один парень говорил, что он вызывает UB, потому что он нарушает
Стандарт С++ ($ 5.7/5 [expr.add])
"Если оба операнда указателя и результат указывают на элементы одного и того же объекта массива или один за последним элементом объекта массива, оценка не должна приводить к переполнению; в противном случае поведение undefined".
Но я не вижу ничего плохого в коде, код для меня отлично подходит.
Итак, я просто хочу знать, действительно ли этот код действителен или нет? Я что-то пропустил?