👌
C言語 __attribute__((destructor))を使用したメモリリークチェックツール
以下のコードを記述したファイルを別途作成し、コンパイル時に巻き込んで、実行します。
リークがある場合は、標準エラー出力とleaksoutというファイルにエラーログが出力されます。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
__attribute__((destructor))
void destructor(void)
{
int status;
status = system("leaks a.out &> leaksout");
if (status)
{
write(2, "leak!!!\n", 8);
system("cat leaksout >/dev/stderr");
exit(1);
}
}
Discussion