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);
}