C 記憶體洩露

2021-08-01 00:21:39 字數 1025 閱讀 2665

一,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次就會中斷,是因為已...