VC中要调试内存泄漏,只需要在程序中包含以下语句:
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
然后在main开始处,加入如下语句:
#ifdef _DEBUG
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
或者 在程序结束处加入
#ifdef _DEBUG
_CrtDumpMemoryLeaks();
#endif
这样在程序结束的时候就会在输出窗口输出内存泄漏的信息,如:
Detected memory leaks!
Dumping objects ->
{651} normal block at 0x00FA9B58, 376 bytes long.
Data: < b= }= ( = = > F0 62 3D 00 90 7D 3D 00 28 96 3D 00 C0 AE 3D 00
Object dump complete.
要想找到具体是哪里new了没有释放,只需要在程序开头再添加一句:
_CrtSetBreakAlloc(xxx);
xxx为泄漏的内存块,可以从输出信息里面查找到,如上面的话就是651,可以理解成第几次分配的内存.