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 NULLno es válido en C ++. delete se puede aplicar a valores de puntero nulo de tipo concreto, pero no a NULL. delete (int*) NULLes legal, pero no delete NULL.
ptrapunta a la memoria y no la llama free, la memoria se perderá. Configurarlo en NULLsimplemente pierde el control de la memoria y se filtra. Si ptr resulta serNULL , llamar freees una no operación.
free(ptr)con ptr = NULL. Nadie dijo nada de eso.