Рассмотрим следующий код:Срок действия кода
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, потому что он нарушает
C++ Standard ($ 5,7/5 [expr.add])
«Если оба указателя операнд и точка результат для элементов одного и того же объект массива или один за последним элементом объекта массива, оценка не должна приводить к переполнению; в противном случае поведение не определено. "
Но я не вижу ничего плохого в коде, код для меня совершенно нормально.
Итак, я просто хочу знать, действительно ли этот код действителен или нет? Я что-то упускаю?
+1 хороший вопрос –