Buku C ++ yang saya baca menyatakan bahwa ketika sebuah pointer dihapus menggunakan delete
operator, memori di lokasi yang ditunjuknya adalah "dibebaskan" dan dapat ditimpa. Ini juga menyatakan bahwa pointer akan terus menunjuk ke lokasi yang sama sampai dipindahkan atau diatur ke NULL
.
Namun dalam Visual Studio 2012; ini tampaknya tidak menjadi masalah!
Contoh:
#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;
}
Ketika saya mengkompilasi dan menjalankan program ini saya mendapatkan output berikut:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Jelas alamat yang ditunjuk oleh penunjuk berubah saat delete dipanggil!
Mengapa ini terjadi? Apakah ini ada hubungannya dengan Visual Studio secara khusus?
Dan jika delete dapat mengubah alamat yang ditunjuknya, mengapa tidak menghapus secara otomatis mengatur pointer ke NULL
alih-alih beberapa alamat acak?