可能重复:
Can a local variable's memory be accessed outside its scope?返回的局部变量的行为的地址
输入:
#include <stdlib.h>
#include <stdio.h>
int func2(void);
int* func1(void);
int func2(void)
{
int* b;
b = func1();
printf("%d", *b);
printf("%d", *b);
printf("%d", *b);
}
int* func1()
{
int a = 13;
return &a;
}
int main()
{
func2();
}
输出:
13 -1077824828 -1077824828
有人可以解释堆栈和操作系统中发生了什么?为什么在得到指针的值后结果从13变为垃圾?
重复数字无限加1。这是未定义的行为。 –
此外,'func2'不返回任何东西,尽管它的返回类型为int。 –
要真正回答这个问题:在你的特定情况下,第一次调用'printf()'覆盖从调用到'func1()'时堆栈剩余的'13'。 – Mysticial