为什么这段代码有效? 我有一个包含 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);
}
最佳答案
无法保证它始终有效! a[2]
、a[3]
和 a[4]
内存不足。代码的行为称为 Undefined Behaviour
例如,尝试下面的一个。还有效吗?
for (int i = 0; i < 100; ++i) {
a[i] = i + 1;
}
关于c - 静态分配的数组在分配超出范围的值时不会溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51836921/