分配值超出范围时,静态分配的数组不会溢出

时间:2018-08-14 08:23:57

标签: c buffer-overflow

为什么此代码有效? 我有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);
}

1 个答案:

答案 0 :(得分:0)

不能保证它始终有效! a[2]a[3]a[4]内存不足。该代码的行为称为 Undefined Behaviour

例如,尝试以下一项。它仍然有效吗?

for (int i = 0; i < 100; ++i) {
        a[i] = i + 1;
}