c/c++程序内存泄漏的调试

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章