C 學習(二十五)記憶體洩漏的幾種方式

2021-09-24 15:54:19 字數 860 閱讀 8729

檢測記憶體洩漏的關鍵是要能截獲住對分配記憶體和釋放記憶體的函式的呼叫。截獲住這兩個函式,我們就能跟蹤每一塊記憶體的生命週期,比如,每當成功的分配一塊記憶體後,就把它的指標加入乙個全域性的list中;每當釋放一塊記憶體,再把它的指標從list中刪除。這樣,當程式結束的時候,list中剩餘的指標就是指向那些沒有被釋放的記憶體。這裡只是簡單的描述了檢測記憶體洩漏的基本原理,詳細的演算法可以參見steve maguire的<>。

如果要檢測堆記憶體的洩漏,那麼需要截獲住malloc/realloc/free和new/delete就可以了(其實new/delete最終也是用malloc/free的,所以只要截獲前面一組即可)。對於其他的洩漏,可以採用類似的方法,截獲住相應的分配和釋放函式。比如,要檢測bstr的洩漏,就需要截獲sysallocstring/sysfreestring;要檢測hmenu的洩漏,就需要截獲createmenu/ destroymenu。(有的資源的分配函式有多個,釋放函式只有乙個,比如,sysallocstringlen也可以用來分配bstr,這時就需要截獲多個分配函式)。

1、android下的記憶體洩漏檢測

2、linux下的記憶體洩漏檢測

3、windows下的記憶體洩漏檢測 windows leaks detector

在windows平台下,檢測記憶體洩漏的工具常用的一般有三種,ms c-runtime library內建的檢測功能;外掛程式式的檢測工具,諸如,purify,boundschecker等;利用windows nt自帶的performance monitor。這三種工具各有優缺點,ms c-runtime library雖然功能上較之外掛程式式的工具要弱,但是它是免費的;performance monitor雖然無法標示出發生問題的**,但是它能檢測出隱式的記憶體洩漏的存在,這是其他兩類工具無能為力的地方。

C 學習筆記 二十五 指向類的指標

乙個指向 c 類的指標與指向結構的指標類似,訪問指向類的指標的成員,需要使用成員訪問運算子 就像訪問指向結構的指標一樣。與所有的指標一樣,您必須在使用指標之前,對指標進行初始化。include using namespace std class boxdouble volume private do...

C 記憶體洩漏的幾種情況

1.在類的建構函式和析構函式中沒有匹配的呼叫new和delete函式 兩種情況下會出現這種記憶體洩露 一是在堆裡建立了物件占用了記憶體,但是沒有顯示地釋放物件占用的記憶體 二是在類的建構函式中動態的分配了記憶體,但是在析構函式中沒有釋放記憶體或者沒有正確的釋放記憶體 2.沒有正確地清除巢狀的物件指標...

C 學習(二十四)記憶體洩漏檢測

檢測記憶體洩漏的關鍵是要能截獲住對分配記憶體和釋放記憶體的函式的呼叫。截獲住這兩個函式,我們就能跟蹤每一塊記憶體的生命週期,比如,每當成功的分配一塊記憶體後,就把它的指標加入乙個全域性的list中 每當釋放一塊記憶體,再把它的指標從list中刪除。這樣,當程式結束的時候,list中剩餘的指標就是指向...