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 NULLn'est pas valide en C ++. delete peut être appliqué à des valeurs de pointeur nul de type concret, mais pas à NULL. delete (int*) NULLest légal, mais pas delete NULL.
ptrpointe vers la mémoire et que vous ne l'appelez pas free, la mémoire fuira. Le paramétrer sur NULLperd simplement votre maîtrise de la mémoire et des fuites. Si ptr cela se produitNULL , l'appel freeest une non-opération.
free(ptr)par ptr = NULL. Personne n'a rien dit de tel.