示唆されているように、これを行うための Valgrind などの優れたツールが既に存在します。
さらに遠く:
練習用の外部ユーティリティなしでこれを行い
たい
. プロジェクトに単一の割り当ておよび割り当て解除機能がある限り、これを行うことができるはずです。
#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
void *p = malloc(size);
printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);
/*Link List functionality goes in here*/
return p;
}
ファイルとそこから割り当てられた行番号で割り当てられているアドレスのリンクされたリストを維持します。のエントリでリンク リストを更新しますmalloc
。
上記と同様に、 の実装を記述できます。この実装ではfree
、リンクされたリストに対して解放するよう求められているアドレス エントリをチェックします。一致するエントリがない場合は、使用法エラーであり、フラグを立てることができます。
プログラムの最後に、リンク リストの内容をログ ファイルに出力または書き込みます。リークがない場合、リンクされたリストにはエントリがありませんが、リークがある場合は、ログファイルにメモリが割り当てられた正確な場所が示されます。
このマクロ トリックを使用すると、関数が提供する型チェックが失われることに注意してください。
これが役に立てば幸いです:)