1. 程式人生 > >C++總結4——記憶體洩露/資源洩露【轉】

C++總結4——記憶體洩露/資源洩露【轉】

記憶體洩露/資源洩露現象  1.malloc/new動態申請的記憶體,忘記寫free/delete,導致記憶體洩露。

2.呼叫預設的賦值運算子過載函式,發生淺拷貝現象,導致記憶體洩露。如下圖: 

這裡寫圖片描述 3.在建構函式中new,但是程式執行過程中丟擲異常,未呼叫解構函式。

4.建構函式中呼叫new開闢記憶體後,丟擲異常。物件未構造成功,不會呼叫解構函式,導致new的堆記憶體沒有釋放。

5.T *p = new T[100]; delete p;  new陣列,可是隻析構了第一個物件,只釋放了第一個物件佔用的記憶體。

6.基類指標指向堆上派生類的物件,若基類的解構函式不是虛解構函式,delete指標時,不能釋放派生類的資源。

7.刪除連結串列節點時,指標移動順序出錯,導致節點丟失,發生記憶體洩露。

8.智慧指標的交叉引用(後面會專門有一個部落格總結智慧指標)

9.介面本身要求使用者使用後,自己釋放記憶體。例:  char * p = CString::GetBuffer();  CString::ReleaseBuffer(p);

10.開啟的fd(檔案描述符)沒有close。或者中途return或丟擲異常,導致close程式碼未執行,導致fd洩露。

11.殭屍程序。父程序不處理殭屍程序導致程序核心棧洩露。核心棧大小為兩個頁面(8K)。