C 記憶體洩漏

2021-09-17 23:17:32 字數 931 閱讀 7904

記憶體洩漏

記憶體溢位:(out of memory)通俗理解就是記憶體不夠,通常在執行大型軟體或遊戲時,軟體或遊戲所需要的記憶體遠遠超出了你主機內安裝的記憶體所承受大小,就叫記憶體溢位。

記憶體洩漏:(memory leak)是指程式中已動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。

只發生一次小的記憶體洩漏可能不會被注意,但是洩漏大量記憶體的程式或洩漏日益增多的程式可能出現各種徵兆:從效能不良(並且逐漸減低)到記憶體完全用盡導致程式崩潰。更糟的是,洩漏的程式可能用掉太多的記憶體,以致於另乙個程式失敗,而使使用者無從查詢問題的真正根源。

記憶體洩漏的定義

一般我們常說的記憶體洩漏是指堆記憶體的洩漏。堆記憶體是指程式從堆中分配的,大小任意的(記憶體塊的大小可以在程式執行期決定),使用完後必須顯示釋放的記憶體。應用程式一般使用malloc,realloc,new等函式從堆中分配到一塊記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體塊,否則,這塊記憶體就不能被再次使用,我們就說這塊記憶體洩漏了。

記憶體洩漏檢測

檢測記憶體洩漏的關鍵問題是要能截獲住對分配記憶體和釋放記憶體函式的呼叫。

windows平台下面visual studio偵錯程式c執行時(crt)庫為我們提供了檢測和識別記憶體洩漏的有效方法,原理大致如下:記憶體分配要通過crt在執行時實現,只要在分配記憶體和釋放記憶體時做好記錄,程式結束時對比分配記憶體和釋放記憶體的記錄就可以確定是不是有記憶體洩漏。

如果要檢測堆記憶體的洩漏,那麼需要截獲住malloc/free和new/delete就可以了(其實new/delete申請內存在大部分c++編譯器中都是用malloc和free來實現的),所以只要截獲前面一組即可。

C 記憶體洩漏型別

在電腦科學中,記憶體洩漏 memory leak 指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況。記憶體洩漏並非指內存在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤,失去了對該段記憶體的控制,因而造成了記憶體的浪費。記憶體洩漏與許多其他問題有著相似的症狀,並且通常情況下只能由...

C 記憶體洩漏常見

程式中通常包含著靜態記憶體和棧記憶體。靜態記憶體用來儲存區域性static物件 類static資料成員以及定義在任何函式之外的變數 全域性變數 棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在定義的程式塊執行時才存在,程式退出,棧...

c 記憶體洩漏問題

記憶體洩漏 所以當程式退出時,系統會收回分配的記憶體,由於記憶體已被錯誤地釋放掉,於是就會出現 debug assertion failed 的錯誤。這個assert說明,有一塊內存在被釋放的時候,它的頭部裡面的資訊已經被改掉了,和預期的不一樣。記憶體分配的程式往往在被分配出的記憶體塊頭部放上一些校...