[英]can't understand the output of the simple c code about function call in linux
[英]Can't understand the output of this code stack storage function call c
我有以下代碼,但是我不明白什么以及為什么它輸出它的作用。
int main(){
int *i;
int *fun();
i=fun();
printf("%d\n",*i);
printf("%d\n",*i);
}
int *fun(){
int k=12;
return(&k);
}
輸出為12和一個垃圾值。 有人可以解釋輸出嗎?
它不應該兩次都返回垃圾值嗎?
我知道k
對於fun()
是局部的,因此它將存儲在堆棧中,並且當fun()
超出范圍時,它將被銷毀。 我在這里想念什么概念?
它不會兩次都返回垃圾值嗎?
在返回fun
, k
不再存在,因此打印存儲在k
地址中的值是未定義的行為 。
這就是為什么您擁有不同的/垃圾價值的原因。
k是fun()的局部變量,因此它將存儲在堆棧中,並且當樂趣結束時,激活將被破壞,或者我是否缺少某些概念?
您不會丟失任何東西,除了事實,即棧不會立即“廢除”或類似的東西。 換句話說,在fun
返回之后,編譯器可以使用該內存自由執行任何所需的操作。
當函數返回時不會立即清除堆棧,因此在fun()
返回之后12
仍將在堆棧上-直到其他人覆蓋了它。
您將在不同的編譯器和不同的構建選項(調試與發行版)中看到不同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.