C 記憶體洩漏原因分析

2021-09-22 21:31:29 字數 1064 閱讀 4059

一.記憶體洩漏:

1.什麼是記憶體洩漏:記憶體洩漏是指在程式中申請了記憶體沒有呼叫釋放函式,導致記憶體沒有被系統**,程式記憶體會不斷增大,最後導致系統記憶體不足,程式卡頓或崩潰。

2.記憶體洩漏的原因:

(1)呼叫new或者malloc申請記憶體後沒有主動呼叫delete或者free。

(2)在使用多型特性時,基類的析構函式沒有設定為虛函式,導致派生類的析構函式沒有被呼叫。

#include #include class base 

virtual ~base()

private:

int* id;

};class student: public base

~student()

private:

char* name;

};int main()

(3)由於程式中斷導致delete或free沒有被呼叫。

#include #include void testfun()

void testfun2()

int main()

catch (const char* err)

testfun2();

system("pause");

}

(4)智慧型指標shared_ptr相互呼叫形成迴圈

#include #include class child;

class parent

std::shared_ptrm_child;

};class child

std::shared_ptrm_parent;

};void testfun()

int main()

(5)delete了void*型別的指標

#include class student

~student()

private:

char* name;

};int main()

記憶體洩漏的原因

1 資源物件沒關閉。如cursor file等資源。他們會在finalize中關閉,但這樣效率太低。容易造成記憶體洩露。sqlitecursor,當資料量大的時候容易洩露 2 使用adapter時,沒有使用系統快取的converview。3 即時呼叫recycle 釋放不再使用的bitmap。適當降...

android記憶體洩漏的原因

記憶體洩漏也稱作 儲存滲漏 用 動態儲存 分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。即所謂記憶體洩漏。記憶體洩漏簡單地說就是申請了一塊記憶體空間,使用完畢後沒有釋放掉。它的一般表現方式是程式執行時間越長,占用記憶體越多,最終用盡全部記憶體,整個 系統崩潰...

MAT分析記憶體洩漏

mat常用的功能 histogram可以列出記憶體中每個物件的名字 數量以及大小。dominator tree會將所有記憶體中的物件按大小進行排序,並且我們可以分析物件之間的引用結構。摘取 這是dominator tree中比較常用的一種分析方式,即搜尋大記憶體物件通向gc roots的路徑,因為記...