一.記憶體洩漏:
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的路徑,因為記...