導致記憶體洩露的原因是什麼

  記憶體洩露的原因是什麼?導致是怎麼回事??下面就由小編告訴大家吧!

  ?

  記憶體洩漏是指堆記憶體的洩漏。

  堆記憶體是指程式從堆中分配的,大小任意的***記憶體塊的大小可以在程式執行期決定***,使用完後必須顯示釋放的記憶體。

  應用程式一般使用malloc,realloc,new等函式從堆中分配到一塊記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體塊,否則,這塊記憶體就不能被再次使用,我們就說這塊記憶體洩漏了

  1. 常發性記憶體洩漏。發生記憶體洩漏的程式碼會被多次執行到,每次被執行的時候都會導致一塊記憶體洩漏。

  2. 偶發性記憶體洩漏。發生記憶體洩漏的程式碼只有在某些特定環境或操作過程下才會發生。

  3. 一次性記憶體洩漏。發生記憶體洩漏的程式碼只會被執行一次,或者由於演算法上的缺陷,導致總會有一塊僅且一塊記憶體發生洩漏。

  比如,在一個Singleton類的建構函式中分配記憶體,在解構函式中卻沒有釋放該記憶體。而Singleton類只存在一個例項,所以記憶體洩漏只會發生一次。

  4. 隱式記憶體洩漏。程式在執行過程中不停的分配記憶體,但是直到結束的時候才釋放記憶體。

  嚴格的說這裡並沒有發生記憶體洩漏,因為最終程式釋放了所有申請的記憶體。但是對於一個伺服器程式,需要執行幾天,幾周甚至幾個月,不及時釋放記憶體也可能導致最終耗盡系統的所有記憶體。所以,我們稱這類記憶體洩漏為隱式記憶體洩漏。