Teoricamente posso dizer que
free(ptr);
free(ptr);
é uma corrupção de memória, pois estamos liberando a memória que já foi liberada.
Mas e se
free(ptr);
ptr=NULL;
free(ptr);
Como o SO vai se comportar de maneira indefinida, não consigo fazer uma análise teórica real sobre o que está acontecendo. O que quer que eu esteja fazendo, isso é corrupção de memória ou não?
Liberar um ponteiro NULL é válido?
delete NULLnão é válido em C ++. delete pode ser aplicado a valores de ponteiro nulo de tipo concreto, mas não a NULL. delete (int*) NULLé legal, mas não delete NULL.
ptrapontar para a memória e você não chamá free-lo, a memória vazará. Configurá-lo como NULLapenas perde o controle da memória e vaza. Se ptr acontecer de serNULL , chamar freeé uma operação sem operação.
free(ptr)com ptr = NULL. Ninguém disse nada parecido.