2012-05-08 51 views

回答

3

返回指向函數中局部變量的指針是未定義的行爲

未定義的行爲不保證分段錯誤。它僅僅意味着任何行爲都是可能的,程序可以以任何方式表現。

未定義行爲意味着代碼應該產生分段錯誤是一個常見的誤解,事實是標準在代碼調用未定義行爲並因此調用名稱的情況下不需要任何特定行爲。

C++標準部1.3.24狀態:

允許不確定的行爲的範圍從具有不可預知的結果完全無視的情況下,在環境中的一個記錄的方式特性翻譯或程序執行期間行爲(與或沒有發佈診斷消息),終止翻譯或執行(通過發佈診斷消息)。

2

不,它應該導致不確定的行爲。

1

當超出範圍時,從堆棧頂部彈出內存地址的事實意味着它被釋放而不被覆蓋。這就是爲什麼你得到輸出「5」。

相關問題