C · Intermediário · Inglês · Técnico
double free
Erro de chamar free duas vezes no mesmo bloco. Corrompe as estruturas internas do alocador e pode derrubar o programa ou ser explorado.
Onde usar
Costuma surgir em caminhos de erro, quando duas funções acham que são donas do mesmo ponteiro. Definir uma regra clara de quem libera cada bloco evita o problema.
Em código
char *p = malloc(10);
free(p);
free(p); // double free: UB
// com p = NULL após o 1º free, seria seguroExemplos
The abort message says double free detected.
A mensagem de abort diz double free detected.
Both error paths call free, so we get a double free.
Os dois caminhos de erro chamam free, então temos um double free.
Cuidado
Esquecer que free(NULL) é seguro: zerar o ponteiro depois de liberar transforma o segundo free em uma operação vazia.
Sinônimos
liberação dupla