可能重複:
Can a local variable's memory be accessed outside its scope?函數返回後本地內存地址是否有效?
我是令人耳目一新有關如何存儲在內部工作原理的知識,我所面臨的困惑。下面是示例代碼
int * func(){
int retval = 3;
return &retval;
}
int main(void){
int *ptr = func();
printf("address return from function %p and value %d\n", ptr, *ptr);
}
我的理解對於如何堆棧存儲器上的日常工作,是當一個函數被調用,它被壓入堆棧。一旦函數返回,此例程中局部變量的生存期將不再有效。所以返回局部變量的地址似乎是無效的,但是當我測試這個代碼時,它實際上返回它的地址,並且在函數返回後仍然有效。
我誤解了這個概念嗎?讚賞任何意見,謝謝。
總之,你在做什麼是無效的,但這並不意味着它不會在某些情況下工作。 –
// @Peter提到的dupe包含我見過的最好的答案之一,有近2000個upvotes .. – amit
無效和不工作是兩個不同的事情。直到數據被覆蓋(通過另一個函數調用),即使您不應該也可以訪問它。如果你在'func'和'printf'之間調用了另一個函數,你會得到一些其他的數字,而不是3. – ughoavgfhw