以下のC++コードを試しました
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
int &a = *p;
delete p;
a = 20;
cout<<a<<" ";
cout<<*p;
return 0;
}
次のように出力されました:20 20
これにより、解放されたメモリまたはゴミにアクセスした結果、実行時エラーが発生する可能性があると考えました。おそらく、プログラムによって解放されたメモリ位置がこれまで使用されていない可能性があり、古い値が保持されているため、この出力が得られました。
だから私は参照を使用しない場合にも起こるはずだと思った
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
// int &a = *p;
delete p;
// a = 20;
// cout<<a;
cout<<*p;
return 0;
}
しかし、この場合、出力は 0 でした (複数回の実行でチェック)。Reference はさまざまな出力と関係がありますか?
コンパイラ: gcc バージョン 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)