Un libro de C ++ que he estado leyendo dice que cuando se elimina un puntero usando el delete
operador, la memoria en la ubicación a la que apunta se "libera" y se puede sobrescribir. También establece que el puntero continuará apuntando a la misma ubicación hasta que sea reasignado o configurado NULL
.
Sin embargo, en Visual Studio 2012; este no parece ser el caso!
Ejemplo:
#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;
}
Cuando compilo y ejecuto este programa obtengo el siguiente resultado:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
¡Claramente, la dirección a la que apunta el puntero cambia cuando se llama a borrar!
¿Por qué está pasando esto? ¿Tiene esto algo que ver específicamente con Visual Studio?
Y si eliminar puede cambiar la dirección a la que apunta de todos modos, ¿por qué no eliminar automáticamente establecer el puntero en NULL
lugar de alguna dirección aleatoria?