gpt4 book ai didi

c - 自动变量在函数调用之间保留值

转载 作者:行者123 更新时间:2023-11-30 21:08:57 25 4
gpt4 key购买 nike

看下面的代码片段:

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

void xyz(void)
{
int a = 44;
}

int main(void)
{
xyz();
abc();
}

当我编译并运行该程序时,它显示值 44。我希望它显示一些其他垃圾值。如果我使用优化,结果正如预期的那样。有人可以帮助我理解确切的问题吗?

谢谢

最佳答案

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

您正在使用未初始化的a,这是未定义的行为。这意味着任何事情都可能发生,包括(但不保证)在 abc() 中为 a 分配的内存仍然保留着一些先前的值(即,在 xyz() 期间分配的值)。

不同的线程可能会破坏该内存。当您从 xyz() 返回时,它可能已被清零。系统可能运行一种“忘记”未使用内存的 RAM,用随机噪声替换先前的值。 永远不要碰未定义的行为

如果将两个变量之一重命名为 a 以外的名称,可能会不会那么困惑。它们具有相同的名称在这里没有影响;它们是各自函数中声明的第一个 int,这 - 在您的特定架构上 - 导致它们占用相同的内存地址。 这是一个巧合,而不是语言所保证的。也就是说,它未定义会发生。

关于c - 自动变量在函数调用之间保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285885/

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