內存泄漏檢測方法

一、首先寫代碼時要控制內存的釋放,好比new以後要delete,看析構函數是否真的執行(不少人編寫釋放內存的代碼在析構函數中處理的),若是沒有真正執行,就須要動態釋放對象;前段時間在一個項目中使用了單例模式對象,將構造函數和析構函數設置成保護類型,在運行代碼時退出時不執行到析構函數裏面(具體也不知道什麼緣由),最後只有手動刪除對象。linux

二、其次讓程序長時間運行,看任務管理器對應程序內存是否是一直向上增長;函數

三、最後使用經常使用內存泄漏檢測工具來檢測內存泄漏點。工具

文本主要描述一些內存泄漏檢測工具功能介紹與簡單使用方法。指針

1、對於VS2005/VS2008編譯器自帶的內存檢測工具/函數。 在 main() 函數開頭加上: #include 「crtdbg.h」 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);對象

2、用BoundsChecker之類的工具。內存

BoundsChecker 是一個Run-Time錯誤檢測工具,它主要定位程序在運行時期發生的各類錯誤。BoundsChecker能檢測的錯誤包括:資源

一、指針操做和內存、資源泄露錯誤,好比:文檔

內存泄露;編譯器

資源泄露;內存管理

對指針變量的錯誤操做。

二、內存操做方面的錯誤,好比:

內存讀、寫溢出;

使用未初始化的內存。

三、API函數使用錯誤

3、linux下能夠用valgrind檢測內存泄露錯誤。

4、purify工具,這個是專門檢測內存的,包括泄露、越界、指針跑飛等均可以檢查,在VC上使用方便。

5、用Windbg,試過查句柄泄漏的,比較方便。

6、Visual Leak Detector

Visual Leak Detector是一款用於Visual C++的免費的內存泄露檢測工具。相比較其它的內存泄露檢測工具,它在檢測到內存泄漏的同時,還具備以下特色:

一、 能夠獲得內存泄漏點的調用堆棧,若是能夠的話,還能夠獲得其所在文件及行號;

二、 能夠獲得泄露內存的完整數據;

三、 能夠設置內存泄露報告的級別;

四、 它是一個已經打包的lib,使用時無須編譯它的源代碼。而對於使用者本身的代碼,也只須要作很小的改動;

五、 他的源代碼使用GNU許可發佈,並有詳盡的文檔及註釋。對於想深刻了解堆內存管理的讀者,是一個不錯的選擇。

相關文章
相關標籤/搜索