【发布时间】:2010-01-10 04:41:23
【问题描述】:
考虑以下代码:
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++ 标准($5.7/5 [expr.add])
"如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为未定义。”
但我看不出代码有什么问题,代码对我来说完全没问题。
所以,我只想知道这段代码是否有效?我错过了什么吗?
【问题讨论】: