【发布时间】:2013-04-18 06:35:15
【问题描述】:
#include <stdio.h>
void function()
{
int stackVar = 10;
printf("Stack variable = %d\n", stackVar);
}
int main(void)
{
function();
return 0;
}
function 返回时的栈帧会发生什么?
【问题讨论】:
-
1) 您将 指针
*x初始化为从“function()”返回。 2) 你从未初始化过*x* *points to*. Soprintf ("%d", *x)` 正在打印未初始化的数据。 -
@paulsm4 OP 似乎知道他在做什么。此外,该函数返回一个指向堆栈变量的指针,因此
int* x在技术上已初始化。 -
@AnishRam 您的问题中没有提到堆栈帧或特定系统。不是所有的计算机都有堆栈帧,有些计算机没有严格的对齐要求,只是根据需要分配尽可能多的堆栈空间。此外,会发生什么完全取决于系统特定的调用约定。并且局部变量也可以分配在CPU寄存器中,您无法知道。没关系,这是一个常见问题解答。只要接受,如果在其生命周期之外访问,您可以获得变量中的任何随机值(包括正确的结果)。
-
我只记得this classic post的话题。
-
@AnishRam 好的。我想您想了解调用堆栈的一般工作原理。那确实是一个不同的问题。但是还有一个问题是你给出了特定的 C 代码,不幸的是它具有未定义的行为,这会将可能的答案拉向不同的方向。无论如何..如果您的问题被关闭并且您认为它不应该关闭,您可以对其进行编辑以使其更具体并向我发送另一条评论;如果看起来合理,我准备投票重新开放。很抱歉给您带来不便。