2012-05-08 3 views

答えて

3

関数のローカル変数へのポインタを返すのは、未定義の動作です。

未定義動作は、セグメンテーション違反を保証するものではありません。それは単にあらゆる行動が可能であり、プログラムがどんな形でも行動できることを意味します。

未定義ビヘイビアはコードがセグメンテーションフォルトを生成する必要があることを意味すると誤解されていますが、実際にはコードが未定義ビヘイビア、したがってその名前を呼び出す場合に特別な動作を必要としません。

C++標準のセクション1.3.24状態:

許容未定義の動作をして(予測できない結果と完全に状況を無視してから、環境の文書化方法の特性に変換、またはプログラム実行中に動作の範囲診断メッセージの発行なしで)、翻訳または実行を終了すること(診断メッセージの発行を伴って)を含むことができる。

2

いいえ、未定義の動作が発生することになっています。

1

それはスコープの外に出たときに、そのメモリアドレスはスタックの先頭からポップされているという事実だけで上書きされない、それが解放されることを意味します。だからあなたは出力 "5"を得ています。

関連する問題