在使用MFC的时候,如果有内存泄漏,会在程序退出的时候显示在调试窗口,指出泄漏的内存是第几次分配的,就当是内存的ID吧,我们可以根据这个ID使用下面的函数找到是哪代码分配的次内存:
_CrtSetBreakAlloc(long lBreakAlloc);
lBreakAlloc就是内存ID。有了这句,程序会在分配这个内存时中断,我们就可以根据堆栈找到是那句话所分配。
如果是非MFC程序怎么办呢?那就再添加下面的代码:
_CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) |
_CRTDBG_LEAK_CHECK_DF );
这样程序就会像MFC一样打印泄漏信息。
最后给出一个完整的例子:
#include <crtdbg.h>
int main
{
_CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) |
_CRTDBG_LEAK_CHECK_DF );
long lBreakAlloc = 0;
_CrtSetBreakAlloc(lBreakAlloc);
int *pInt = int[1];
return 0;
}