C++總結4——記憶體洩露/資源洩露【轉】
阿新 • • 發佈:2018-12-17
記憶體洩露/資源洩露現象 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)。