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

标签 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);
}

最佳答案

无法保证它始终有效! 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/

相关文章:

c - 溢出的缓冲区数据不会连续存储

c - 我怎样才能找到这段代码中的漏洞?

c - 用c逐行写入文件

c - Stellaris Launchpad LM4F120 上的看门狗配置

python - 如何分析组合的 python 和 c 代码

c - 家庭作业 - 无法利用缓冲区溢出

c - 缓冲区溢出利用更改函数调用

Linux - 无法生成核心转储

c - 如何停止 crontrack session

c代码在dumpbin中报undef sprintf 编译没有错误