为什么此代码有效? 我有2个元素的数组,它应该溢出,但是在使用gcc的Linux上它甚至没有给我一个错误。相反,它可以工作并输出5。
int doS(int a[2])
{
printf("%d", a[4]);
}
int main()
{
int rows =2;
int a[rows];
a[0] = 1;
a[1] = 2;
a[2]= 3;
a[3] = 4;
a[4] = 5;
doS(a);
}
答案 0 :(得分:0)
不能保证它始终有效! a[2]
,a[3]
和a[4]
内存不足。该代码的行为称为 Undefined Behaviour
例如,尝试以下一项。它仍然有效吗?
for (int i = 0; i < 100; ++i) {
a[i] = i + 1;
}