VS調試內存泄露

注意,如果發生泄漏的 cpp 文件中如果沒有添加以下代碼,則可能無法正常跳轉:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

最常見的情況
如: MFC 可能報告 Strcore.cpp 文件的某行有內存泄漏, 但實際上這是 CString 的實現函數, 本身並不會造成
內存泄漏,由於使用它的代碼並沒有正確釋放包含了 CString 對象的內存塊,導致 CString 內部動態分配的緩存空
間得不到釋放引起泄漏, 此時並不能直觀的知道發生了內存泄漏的真實位置, 這時我們就需要更多的信息來輔助
定位發生泄漏的實際位置。那麼我們看看緊接其後的:
{86}normalblockat0x00422E80,10byteslong.
Data:<>1F1F1F1F1FCDCDCDCDCD

它告訴我們:在第 86 次分配的內存沒有釋放,一共有 10 字節,內容移 16 進制方式打印給我們看。有了
這些信息,我們可以開始調試內存泄漏了

在程序開始的地方下斷點,再在watch窗口name中輸入
在 VS2005 中常寫爲:
{,msvcrt80d.dll}_crtBreakAlloc
VS2013 中寫爲:(注意是 vcr 而不是 vcrt)
{,msvcr120d.dll}_crtBreakAlloc
其它版本的類似。

在watch窗口中的value中輸入內存塊號,再按F5即可定位到泄露之處

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