Un livre C ++ que j'ai lu indique que lorsqu'un pointeur est supprimé à l'aide de l' delete
opérateur, la mémoire à l'emplacement vers lequel il pointe est "libérée" et peut être écrasée. Il indique également que le pointeur continuera à pointer vers le même emplacement jusqu'à ce qu'il soit réaffecté ou défini sur NULL
.
Dans Visual Studio 2012 cependant; cela ne semble pas être le cas!
Exemple:
#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;
}
Lorsque je compile et exécute ce programme, j'obtiens la sortie suivante:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Il est clair que l'adresse vers laquelle pointe le pointeur change lorsque la suppression est appelée!
Pourquoi cela arrive-t-il? Cela a-t-il quelque chose à voir avec Visual Studio en particulier?
Et si la suppression peut changer l'adresse vers laquelle elle pointe de toute façon, pourquoi la suppression ne définirait-elle pas automatiquement le pointeur au NULL
lieu d'une adresse aléatoire?