【发布时间】:2012-08-31 06:15:19
【问题描述】:
可能重复:
Can a local variable's memory be accessed outside its scope?
第二个printf有什么问题?
#include<stdio.h>
int* fun() {
int a =10;
return &a;
}
int main() {
int *a;
a = fun();
printf("%d",*a);
printf("%d",*a);
return 0;
}
我已返回局部变量的地址并将其传递给printf。第一次正确打印为“10”,但第二次显示为垃圾值。
如果最初a 是一个指向10 地址的悬空指针,为什么第二次不是?
谁能解释一下?
我什至尝试在第一次调用 printf 之前调用其他函数,但我仍然得到相同的输出。
在 BeniBela 的回答之后,我尝试了这个..
#include<stdio.h>
int* fun()
{
int a =10;
return &a;
}
void fun2(int d)
{
int a,b,c;
}
int main()
{
int *a,b;
a = fun();
fun2(5);
printf("%d",*a);
printf("%d",*a);
return 0;
}
还是一样的输出..:(
【问题讨论】:
-
我猜英语不是您的第一语言,但您可能仍想考虑通过拼写检查器运行它 - 大多数现代浏览器都有一些相当不错的语言。
-
不,我想知道堆栈究竟是如何工作的......并且第一次它会正确打印......在第一次调用 printf() 后堆栈发生了什么?
-
10也是一个垃圾值,它恰好是您所期望的值。如果你尝试printf("%d", rand());,它有时也会打印10。