Um livro em C ++ que tenho lido afirma que, quando um ponteiro é excluído usando o delete
operador, a memória no local para o qual está apontando é "liberada" e pode ser substituída. Ele também afirma que o ponteiro continuará apontando para o mesmo local até que seja reatribuído ou definido como NULL
.
No Visual Studio 2012, no entanto; esse não parece ser o caso!
Exemplo:
#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;
}
Ao compilar e executar este programa, obtenho a seguinte saída:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Claramente, o endereço que o ponteiro está apontando muda quando a exclusão é chamada!
Por que isso está acontecendo? Isso tem algo a ver com o Visual Studio especificamente?
E se delete pode alterar o endereço para o qual está apontando, por que não excluir automaticamente define o ponteiro para em NULL
vez de algum endereço aleatório?