Possible Duplicate:
Can a local variable's memory be accessed outside its scope?
returning address of local variable
我有一个问题,首先看代码
#include <stdio.h>
int sum(); /* function declaration */
int main()
{
int *p2;
p2 = sum(); /* Calling function sum and coping its return type to pointer variable p2 */
printf("%d",*p2);
} /* END of main */ `
int sum()
{
int a = 10;
int *p = &a;
return p;
} /* END of sum */
我认为答案是 10 和变量 a 的地址,但我的老师说 a 是函数的局部变量,所以 a 及其 当函数返回或执行完毕时,值将从内存位置删除。我尝试了这段代码,答案当然是 10 和 a 的地址,我使用 GNU/GCC 编译器。谁能说出什么是对什么是错。 提前致谢。
最佳答案
你的老师是绝对正确的:即使你修复你的程序以返回 int*
代替 int
,你的程序仍然包含未定义的行为。问题在于,一旦 sum
返回,曾经放置 a
的内存就可以重用了。内存可能会保持原样供您访问,因此您甚至可能会打印十个,但此行为仍然未定义:它可能在一个平台上运行并在其他十个平台上崩溃。
关于c - 在 main 中调用此函数时,局部变量是否会从内存中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015002/