C++內存泄露調試檢測

最近在做一個關於一維條形碼檢測的算法,需要用C++實現。算法本身比較簡單,最後遇到的比較嚴重的問題卻是內存泄露。由於C++語言本身不存在自動垃圾回收機制,需要程序員手動釋放申請的堆內存空間。總的來說解決內存泄露的根本原則就是依靠程序員高度的自覺性。對每次申請的內存,在使用完後就立即釋放掉。此話雖然看似簡單,但在一個邏輯比較複雜的程序中卻是很難完全實現的,因爲存在可惡的指針問題,導致程序員有時候真的很難確定我這塊內存到底釋放掉了沒有。實際上,不釋放和重複釋放內存一樣讓人頭疼。不過,微軟在VS中提供了宏定義的調試手段幫助程序員解決這個問題:

在頭文件中定義以下宏:

#define _CRTDBG_MAP_ALLOC
#define _CRTDBG_MAP_ALLOC_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW

這樣定義完後你就可以在需要查看當前內存泄露情況的地方添加:

_CrtDumpMemoryLeaks();

這樣在運行到該處的時候就會在“輸出”窗口中自動輸出當前尚未釋放的堆內存信息。一般如下形式:

內存泄露輸出信息

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