缓冲区溢出:为什么缓冲区分配会影响其他变量?

问题描述 投票:0回答:1

void foo() {
    int value = 0;
    char buf[4];
    buf[4] = 1;


    printf("value: %d\n", value);
}

int main() {
    foo();
    return 0;
}


为什么'value'打印1?

我相信这与缓冲区溢出和小尾数有关,但我发现很难理解。

c memory-management buffer-overflow stack-memory
1个回答
0
投票

因为这是未定义的行为。

改变优化选项就足够了,你会得到不同的结果。

以神箭为例:

  • 与-O0:1
  • 使用-Os:0

但事情不一定是这样的。它最终可能会出现段错误,或者可能会发生其他情况。

https://godbolt.org/z/TEbWbMvsa

© www.soinside.com 2019 - 2024. All rights reserved.