Un libro in C ++ che ho letto afferma che quando un puntatore viene eliminato utilizzando l' delete
operatore, la memoria nella posizione a cui punta viene "liberata" e può essere sovrascritta. Indica inoltre che il puntatore continuerà a puntare nella stessa posizione fino a quando non viene riassegnato o impostato su NULL
.
In Visual Studio 2012 tuttavia; questo non sembra essere il caso!
Esempio:
#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;
}
Quando compilo ed eseguo questo programma ottengo il seguente output:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Chiaramente l'indirizzo a cui punta il puntatore cambia quando viene chiamato delete!
Perché sta succedendo? Questo ha qualcosa a che fare con Visual Studio in particolare?
E se cancellare può cambiare l'indirizzo a cui punta comunque, perché eliminare non dovrebbe impostare automaticamente il puntatore NULL
invece di un indirizzo casuale?