重複の可能性:
ローカル変数のメモリにそのスコープ外でアクセスできますか?
次の単純な C++ コードを検討してください。
#include <iostream>
struct Test
{
Test( int i )
: ref( i ),
ptr( &i ) {}
int &ref;
int *ptr;
};
int main()
{
Test t( 5 );
std::cout << t.ref << std::endl;
std::cout << *t.ptr << std::endl;
return 0;
}
クラス Test は、スタック上に存在するローカル変数 i へのポインターと参照を格納します。テストコンストラクターから戻った後、私は破壊されたと思います。しかし、明らかにそうではありません。これはプログラムの出力であるため:
5
134513968
ポインターへのアクセスの結果は、私が期待するものです。つまり、実行ごとに変化するランダムな値です。ただし、ローカル変数 i がまだ存在する場合のみ、参照アクセスは常に 5 になります。
誰かが私にこの動作を説明できますか? 64 ビット Linux (バージョン 4.6.3) で g++ を使用しています。
よろしく、 enuhtac