新博客地址:http://gorthon.sinaapp.com/
結果如下:
h
printf
<這裏是個亂碼>
Press any key to continue
或者下面這樣:
結果也是亂碼。
問題的解答:
以下摘自http://zhidao.baidu.com/question/156881190.html
首先局部變量在函數執行完後會被釋放,這個毋庸置疑。
問題出在系統什麼時候會釋放被調用的函數棧數據。
如果在沒有任何函數被調用時,原來的函數棧還是被保留的,直到調用了新的函數,新的函數棧沖掉了原來的函數棧。
因此,函數返回指針後,必須在下一個函數中立即取出,不然就被沖洗掉了。
其他幾點:
函數退出時局部變量出棧,對象肯定是銷燬了。
銷燬指的是將那塊內存標爲空閒供其它變量使用,而該內存上的值仍然存在。
【釋放後那塊內存並不是馬上就被其他地方佔用,根據實際情況起碼會空閒一會,可能是一瞬間。如果你的程序較複雜,那這塊內存可能很快就再次被使用,如果程序很簡單,可能在很長一段時間內都是空閒。
所以在函數返回後將變量的值馬上賦值給另外一個變量,局部變量已經銷燬了,這塊內存上的值還沒來得及被修改,所以你的外部變量獲得了一個正確的值。
所以你的結果正確並不代表變量沒有被銷燬。無論用引用還是變量來接受局部變量的值,局部變量肯定是已經銷燬了的。】