Teóricamente puedo decir que
free(ptr);
free(ptr);
es una corrupción de la memoria ya que estamos liberando la memoria que ya se ha liberado.
Pero que si
free(ptr);
ptr=NULL;
free(ptr);
Como el sistema operativo se comportará de una manera indefinida, no puedo obtener un análisis teórico real de lo que está sucediendo. Lo que sea que esté haciendo, ¿es esto una corrupción de memoria o no?
¿Es válido liberar un puntero NULL?
delete NULL
no es válido en C ++. delete se puede aplicar a valores de puntero nulo de tipo concreto, pero no a NULL
. delete (int*) NULL
es legal, pero no delete NULL
.
ptr
apunta a la memoria y no la llama free
, la memoria se perderá. Configurarlo en NULL
simplemente pierde el control de la memoria y se filtra. Si ptr
resulta serNULL
, llamar free
es una no operación.
free(ptr)
con ptr = NULL
. Nadie dijo nada de eso.