ExpertiDict

C · Intermediário · Inglês · Técnico

double free

/ˈdʌ.bəl fɹi/substantivo

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 seguro

Exemplos

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

Veja também

Todos os termos de C