void foo() {
int value = 0;
char buf[4];
buf[4] = 1;
printf("value: %d\n", value);
}
int main() {
foo();
return 0;
}
为什么'value'打印1?
我相信这与缓冲区溢出和小尾数有关,但我发现很难理解。
因为这是未定义的行为。
改变优化选项就足够了,你会得到不同的结果。
以神箭为例:
但事情不一定是这样的。它最终可能会出现段错误,或者可能会发生其他情况。