可能的重复:
当我写入超出数组末尾时,为什么不会出现分段错误?
这段代码编译并运行没有任何错误。但如何呢?
#include <stdio.h>
int main (void)
{
int foo[2];
foo[8] = 4; /* How could this happen? */
printf("%d\n", foo[8]);
return 0;
}
我正在编译海湾合作委员会 4.7.2在 Arch Linux x86_64 上。
gcc -Wall -o "main" "main.c"
因为未定义的行为并不意味着“您将收到段错误”,这将是已定义的行为。
假设您正在调试模式下运行,并且编译器正在填充堆栈/局部变量空间。您可能只是写入堆栈空间的一些未使用的部分。
在星期一构建发布版本,此时您的编译器感觉很奇怪,现在您覆盖返回地址或设置调用的代码printf
, 任何。哎呀。
只有一种可能的结果,但你明白了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)