C 中如何防止記憶體洩漏,c 中有什麼方法可以避免記憶體洩露?

時間 2022-02-11 22:40:19

1樓:回頭的世界

1)盡量把記憶體的分配和釋放操作封裝在類裡面,自動化地進行;

2)程式執行過程中避免記憶體的分配操作;(如可以採取預先分配好記憶體緩衝區的方式)--這條其實很重要;

3)採取動stl元件的態陣列代替手工分配物件記憶體的方式也是一種辦法;

2樓:

使用所謂的即申請即初始化的方法(名字可能有錯)

這點在c++primer中有講解。

不過怎麼說呢。還是要靠自己細心。小心行的千年船嗎

3樓:

別人我不知道,但我的做法如下:

1.盡量不去手動分配記憶體。比如,我一般不使用陣列,而使用stl的vector.

2.如果需要手動分配陣列,盡量使用stl中的分配方式,或者使用stl和boost中的智慧型指標。

3.某些應用,比如msxml,盡量使用智慧型指標。

4.凡是使用new和delete的地方,首先注意指標的初始化,然後要注意new和delete的配對,再就是要注意錯誤的捕捉。很多時候,記憶體洩漏不是因為new和delete的配對造成的,而是在自己沒有考慮到的可能結果中,程式中斷而沒有delete手動分配的記憶體.

5.貌似有專門的方法來檢測記憶體洩漏。不過我只聽說過,沒用過。

4樓:橙子

new 與 delete要配對存在。。。這個很重要

c++中有什麼方法可以避免記憶體洩露?

5樓:

良好的編碼風格和嚴謹的科學態度是最好的方法。

6樓:從c走向

首先同意3樓的,不過確實使用了指標之後,很容易一不小心就記憶體洩露了,所以還是應該養成良好的習慣,寫完之後要注意檢查一下,還有就是在除錯的時候要把好關

7樓:跑牛

上面說的對 除非你不使用指標(貌似不使用指標是不可能的) 否則不可能避免這種現象..只能是你寫命令時候提起精神........

8樓:匿名使用者

我覺得只要使用了指標,則避免記憶體洩漏沒什麼完美好方法,不管什麼方法都要仔細地一再檢查.

9樓:

看一下林銳的那本《高質量編寫c/c++**》

10樓:沙支誇依

有測試記憶體洩露的工具。你在網上找吧。。。好多

11樓:棍子哥哥

使用stl和boost

工程中如何盡量避免c/c++記憶體洩露

12樓:匿名使用者

c/c++軟體工程實現中,記憶體洩露可能是乙個讓眾多程式設計師懊惱的問題. 記憶體洩露問題是如此普遍並且被認為是難以解決,標明記憶體洩露不是乙個理論上的問題, 而是乙個實踐中的問題. 假若它是乙個理論上的問題, 那麼它肯定早就從理論上加以解決而不再是乙個問題.

軟體工程實踐中, 應該努力採用良好的設計策略和**習慣來盡量避免記憶體洩露; 說避免並非是逃避困難而是規避記憶體洩漏遍及**導致不可控的風險和測試階段導致的疲於奔命. 下面總結幾個關乎記憶體洩漏的設計原則:1.

盡量不設計內部分配記憶體而該記憶體傳到外部使用的介面;2. 當記憶體是系統或模組內部分配並且需要傳給外部時(不可更改性介面需求時), 為了在特定上下文/執行緒/環境終止時清理內部分配的與之相關的記憶體, 那麼這時系統需要引入乙個也許並不複雜的全域性記憶體管理器;3. 與特定上下文/執行緒/環境系統所有記憶體分配/釋放操作都經由這個記憶體管理器來追蹤; 在軟體規模增大時, 多種分配方式的使用只會帶來混亂從而不可避免的導致記憶體洩露; 4.

對於與特定上下文/執行緒/環境相關的介面, 外部無法預先知道緩衝區大小需求的情況(如io, 一般有內部緩衝區且有足夠的狀態和資訊), 或者與特定上下文無關,但能根據傳入引數知道需要緩衝大小的介面(如協議包序列化引數含大小), 介面需要支援:首先傳遞null緩衝區指標,返回需要的緩衝區大小; 傳入的緩衝區大小太小時,返回緩衝小錯誤碼;傳入的緩衝區足夠時,拷貝輸出資料.5.

系統中與特定上下文無關的介面或者業已存在的, 外部無法預先知道緩衝區大小需求的情況, 使用特定上下文進行封裝, 其分配的記憶體註冊到記憶體管理器中, 使用完畢後需要呼叫記憶體管理器釋放介面顯式釋放, 盡量將其使用控制在特定層次內.6. 使用記憶體洩露工具檢查整個系統.

C實參括號中有大括號是什麼意思,C 如何判斷一個大括號對應的大括號

最大功能 分開來。canvas.shapes.add 這裡面的引數要填一個物件例項。下面這個就是建立物件例項了,且同時對例項裡的2個屬性rectangle userdata賦值 newbox 新增一個物件,例項化時,對部分屬性進行賦值 c 如何判斷一個大括號對應的大括號 村頭希望 工具 選項 環境 ...

c 繼承後的記憶體分配問題,c 中給結構體分配動態記憶體的問題 用new嗎 怎麼用

柳生十連兵 不能訪問是不能直接通過派生類物件直接呼叫,但是可以通過派生類的成員函式呼叫基類的公有函式來訪問基類的私有屬性.難道編譯器會分配一塊記憶體放著不管造成記憶體洩漏? 墨夷欣笑 因為在派生類中通過可以定義新函式成員來訪問這些記憶體 間接訪問 比如呼叫基類派生下來的成員函式 所以這些記憶體是可以...

C語言程式中的標頭檔案,c語言中有哪些常用的標頭檔案?

你這個是從linux系統中su軟體中得到的開源程式吧 這些是su軟體的庫函式 你在su src su include目錄下可以獲得,這兩個庫函式。你肯定是別人寫的標頭檔案,不屬於c庫標頭檔案。如果知道標頭檔案的作用,你可以自己寫,其他的辦法沒有。你是從 弄的這些標頭檔案呢?你用這些又是為了實現什麼呢...