gpt4 book ai didi

c - 为什么函数会打印先前调用的函数中局部自动变量的值?

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:04 25 4
gpt4 key购买 nike

#include<stdio.h>

void foo(void)
{
int a=42;
}

void boo(void)
{
int a;
printf("%d\n",a);
}

int main()
{
foo();
boo();
}

为什么 boofoo 打印出 a 的值?我阅读了有关执行堆栈和激活帧的解释,但我不明白。

最佳答案

这就是您的函数的调用方式(a)

                   stack
--------------------------------- call return
---------------------------------
| |
earlier frame | earlier frame |
| |
---------------------------------
---------------------------------
| | (5) pop old %ebp to %ebp
|----------------|
caller's frame | func arguments | (1) push args
|----------------|
| return address | (2) push ret-addr (6) reset %esp here
---------------------------------
---------------------------------
| old %ebp | (3) push old %ebp (4) reset %esp = %ebp
|----------------| reset %ebp here
| |
callee's frame | local variables|
| |
---------------------------------
---------------------------------

当函数返回时,其框架中的数据可能会保留。因此,在您的情况下,boo() 使用与 foo() 的旧数据相同的帧。


(a) 标准中没有任何内容保证这一点,它只是对您的特定场景的最可能解释。

关于c - 为什么函数会打印先前调用的函数中局部自动变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com