可能重複:
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