C言語のメモリリークテストをしたことがなかったので
調べてみました。 嘘かいているところが多く困りました。


このサンプルは、標準出力にエラーを送ります。
デバッガなどに送るには、_CrtSetReportModeを変更する必要があります。
いつでも再現できるように
コマンドも一緒に埋め込みました。

参考 MSDN
makeファイルへの挿入はこのようにします

nmake -f Makefile.msc DEBUG=1

!IFDEF DEBUG
CFLAGS += /D_DEBUG /D_CRTDBG_MAPALLOC /MTd /ZI /W3
!ENDIF

以下サンプルソース

/*
 *  testleek.c
 *
 [cmd.exe]
 "c:\Program Files\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
 (1) リンクも一緒にする
cl.exe testleek.c /D_DEBUG /MTd /ZI -W3
testleek.exe
または (2) objだけ生成して後からリンクする
cl /c -D_DEBUG /MTd -Zi -W3 -Od testleek.c
link /debug testleek.obj testleek.exe */ # define _CRTDBG_MAP_ALLOC # include <stdlib.h> # include <crtdbg.h> int main(void){ _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); _CrtSetReportMode( _CRT_ERROR , _CRTDBG_MODE_FILE ); _CrtSetReportMode( _CRT_WARN , _CRTDBG_MODE_FILE ); _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT ); _CrtSetReportFile( _CRT_ERROR , _CRTDBG_FILE_STDOUT ); _CrtSetReportFile( _CRT_WARN , _CRTDBG_FILE_STDOUT ); char * p=malloc(1000); malloc(7); // _CrtDumpMemoryLeaks(); return(0); }