Okuduğum bir C ++ kitabı, delete
operatör kullanılarak bir işaretçi silindiğinde işaret ettiği konumdaki belleğin "serbest bırakıldığını" ve üzerine yazılabileceğini belirtiyor. Ayrıca, işaretçinin yeniden atanana veya olarak ayarlanana kadar aynı konumu göstermeye devam edeceğini belirtir NULL
.
Visual Studio 2012'de ise; durum böyle görünmüyor!
Misal:
#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;
}
Bu programı derleyip çalıştırdığımda şu çıktıyı alıyorum:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Silme çağrısı yapıldığında, işaretçinin işaret ettiği adres açıkça değişir!
Bu neden oluyor? Bunun özellikle Visual Studio ile bir ilgisi var mı?
Ve eğer silme, işaret ettiği adresi değiştirebiliyorsa, neden silme işlemi otomatik olarak işaretçiyi NULL
rastgele bir adres yerine olarak ayarlamasın ?