C 記憶體洩露(概念 危害 解決)

2021-10-09 14:24:28 字數 915 閱讀 9671

前言

記憶體洩露(memory leak)是我們常常聽說的乙個名詞,那麼什麼是記憶體洩露呢?記憶體洩露有什麼危害呢?記憶體洩露應當怎樣解決呢?

1.1 記憶體洩露的概念

記憶體洩露:由於疏忽或者錯誤(異常安全)導致程式未能釋放已經不再使用的記憶體的情況。記憶體洩露並非是指內存在物理上的消失,而是指程式失去了對該記憶體的控制,導致的資源浪費。

1.2 記憶體洩露的分類

堆記憶體洩露(heap leak)

通過malloc,realloc,new等方式從堆中分配的記憶體,並且完成後必須通過呼叫對應的free,delete 釋放。如果程式的設計的錯誤導致這部分記憶體沒有被釋放,那麼此後這塊記憶體將不會被使用,就會產生heap leak。

系統資源洩露(resource leak)

使用系統分配的資源比如 :bitmap,socket 等沒有使用相應的函式釋放掉。導致系統資源的浪費,嚴重可導致系統效能降低,系統執行不穩定。

1.3 記憶體洩露的危害

如果申請的記憶體沒有釋放,隨著程序的正常結束,則這個記憶體會被自動釋放。

但長期執行的程式遇到記憶體洩漏的問題,危害就非常的大。比如:作業系統、伺服器,這些程式長期執行,若遇到記憶體洩露的問題會導致可用的記憶體越來越少,某些服務的操作失敗(開啟檔案、建立套接字、傳送資料)。

方法一:事前預防

進行c/c++編碼時不用的空間需要及時釋放,複雜的地方可以借用智慧型指標進行處理。

方法二:事後解決

使用工具軟體boundschecker,boundschecker是乙個執行時錯誤檢測工具,它主要定位程式執行時期發生的各種錯誤。

linux下記憶體洩露檢測工具valgrind,功能強大,不僅僅是記憶體洩漏檢測工具。

c 記憶體洩露(三) 定位和解決記憶體洩露

如果編寫的c 程式出現記憶體洩露了,不要慌忙,你要相信任何錯誤都是人為造成的,只要是人為的,你一定能找到錯誤所在,只不過是時間的問題而已。在面對記憶體洩露,如果程式不是特別長的話,你可以使用人工校驗,著重檢視new和delete的匹配呼叫。如果經過一番折騰還未確定程式的錯誤所在,首先應該明白程式在不...

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 操作,因此,...