如何理解“函數返回的局部變量或臨時變量,其內容是不可預估的、是絕對不安全的”?

 

引入問題: VS2015 C++ 函數中的 局部變量,調用完函數後局部變量的值是否不再存在?

 

 

 

困惑:

method() 函數中 數組outbuff[50]是個局部變量,在主函數調用完method() 函數後,數組outbuff[50] - 這個局部變量存放在棧區應該自動釋放掉的,釋放之後它存儲的值應該是混亂的, 爲什麼在主函數中卻能夠訪問到正確的值?向各位 求助,提前謝謝了。

 

解決問題:

先了解下函數流程:

 

 

 

因此,綜合具體代碼來看:

對於printf_s("%s\n", a); 因爲a是在局部變量outbuff[50]沒有被修改之前strcpy()過來的,所以能夠正確得到結果;

對於printf_s("%s\n", b); 調用printf_s時,該函數內部對局部變量進行初始化,局部變量outbuff[50]中的值被編譯器進行默認的初始化修改, 所以會輸出編譯器默認初始化的字符串。

那麼子函數中返回局部變量的做法是否正確呢?答案是絕不對可以的!因爲這樣做就造成返回的局部變量其內容是不可預估的。

 

 

更多,可參考我的貼子:

https://bbs.csdn.net/topics/394816338

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章