一,c++記憶體洩露
下面列出的是有可能導致記憶體洩露的幾種情況
1,在類的建構函式與析構函式中沒有匹配呼叫new與delete運算子
這種情況需要注意兩個問題
a,在建構函式中使用new分配記憶體,但是在析構函式中沒有釋放掉記憶體。
b,在建構函式中使用new 分配記憶體,但是在析構函式中使用delete釋放記憶體,沒有使用delete 來釋放記憶體。
2,指向物件的指標陣列不等於物件陣列
物件陣列是指,陣列中存放的是物件,只需要
delete p
,即可呼叫物件陣列中的每個物件的析構函式釋放空間。指向物件的指標陣列是指,陣列中存放的是指向物件的指標,不僅要釋放每個物件的空間,還要釋放每個指標的指向的記憶體空間,
delete p
只是釋放了每個指標,但是並沒有釋放物件的空間,正確的做法,是通過乙個迴圈,將每個物件釋放,然後再把指標釋放。
3,淺複製(拷貝建構函式與賦值運算子)
類copy constructor與assign operation進行的都是淺複製,進行逐個成員的複製。如果類的乙個成員變數是乙個指標,在類的建構函式中,使用new分配一塊記憶體空間,初始化上面的指標,讓這個指標指向前面分配的記憶體空間。
class string
friend ostream & operator<<(ostream &os, string &obj)
delete p;
int len = strlen(s.p);
p = new char[len + 1];
strcpy(p, s.p);
return *this;
}
4,在乙個類的繼承體系中,沒有把基類的析構函式宣告為虛函式
下面是乙個類的繼承結構
class base
C 記憶體洩露
簡單點說就是只申請不釋放 在c 中我們通過malloc,new來通過系統申請記憶體,但當我們使用完畢之後 裡面可能就沒有執行相應的free和delete的操作,這樣我們申請的這部分記憶體系統就不會再次的 分配,這就造成了記憶體洩露!這篇帖子講的很細大家可以研究研究。我們在delete乙個指標之後要將...
C 記憶體洩露
boost基礎 any int p new int 10 應該用 shared ptrp new int 10 boost any a p 危險,會造成記憶體洩露any 的析構函式會刪除內部的 holder 物件 any 是包裝類 如果型別是指標,any 並不會對指標執行 delete 操作,因此,...
C 記憶體洩露
c 記憶體洩露主要發生在淺拷貝階段 例如 include include include includeusing namespace std class a a int main 由於發生了淺拷貝,所以程式退出的時候,就中斷了,因為同一記憶體析夠了2次。至於為什麼同一物件析夠2次就會中斷,是因為已...