在使用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;
}