本文へスキップ
BecomeCoder

C言語のエラー · エラー12

double free ― 同じメモリを2回解放した(実行時)

free した領域をもう一度 free すると、メモリ管理の内部情報が壊れてクラッシュします。ポインタを2つの場所で管理しているときに起こりがちです。

出るコード

char *buf = malloc(10);
free(buf);
free(buf);   // 二重に解放

エラーメッセージ

free(): double free detected in tcache 2
Aborted (core dumped)

直し方

free した直後にポインタへ NULL を代入します(free(buf); buf = NULL;)。NULLfree しても何も起きないので、二重解放を防げます。