私が読んでいるC ++の本では、delete
演算子を使用してポインターが削除されると、ポインターが指している場所のメモリーが「解放」され、上書きされる可能性があると述べています。また、ポインターが再割り当てされるか、またはに設定されるまで、ポインターは同じ場所を指し続けると述べていますNULL
。
ただし、Visual Studio 2012では。これはそうではないようです!
例:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int;
cout << "ptr = " << ptr << endl;
delete ptr;
cout << "ptr = " << ptr << endl;
system("pause");
return 0;
}
このプログラムをコンパイルして実行すると、次の出力が得られます。
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
明らかに、deleteが呼び出されると、ポインターが指しているアドレスが変更されます!
なぜこうなった?これは特にVisual Studioと関係がありますか?
そして、削除がとにかく指しているアドレスを変更できる場合、削除によって、NULL
ランダムなアドレスの代わりにポインタが自動的に設定されないのはなぜですか?