最近在做一個關於一維條形碼檢測的算法,需要用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();
這樣在運行到該處的時候就會在“輸出”窗口中自動輸出當前尚未釋放的堆內存信息。一般如下形式: