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

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