👌

C言語 __attribute__((destructor))を使用したメモリリークチェックツール

2021/07/05に公開

以下のコードを記述したファイルを別途作成し、コンパイル時に巻き込んで、実行します。

リークがある場合は、標準エラー出力と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