Théoriquement, je peux dire que
free(ptr);
free(ptr);
est une corruption de mémoire puisque nous libérons la mémoire qui a déjà été libérée.
Mais si
free(ptr);
ptr=NULL;
free(ptr);
Comme le système d'exploitation se comportera d'une manière indéfinie, je ne peux pas obtenir une analyse théorique réelle de ce qui se passe. Quoi que je fasse, cette mémoire est-elle corrompue ou non?
La libération d'un pointeur NULL est-elle valide?
delete NULL
n'est pas valide en C ++. delete peut être appliqué à des valeurs de pointeur nul de type concret, mais pas à NULL
. delete (int*) NULL
est légal, mais pas delete NULL
.
ptr
pointe vers la mémoire et que vous ne l'appelez pas free
, la mémoire fuira. Le paramétrer sur NULL
perd simplement votre maîtrise de la mémoire et des fuites. Si ptr
cela se produitNULL
, l'appel free
est une non-opération.
free(ptr)
par ptr = NULL
. Personne n'a rien dit de tel.