記憶體洩露。可是怎麼避免呢?

2022-05-09 06:51:06 字數 704 閱讀 5830

記憶體洩漏也稱作「儲存滲漏」,用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。(其實說白了就是該記憶體空間使用完畢之後未**)即所謂記憶體洩漏。

記憶體洩漏形象的比喻是「作業系統可提供給所有程序的儲存空間正在被某個程序榨乾」,最終結果是程式執行時間越長,占用儲存空間越來越多,最終用盡全部儲存空間,整個系統崩潰。所以「記憶體洩漏」是從作業系統的角度來看的。這裡的儲存空間並不是指物理記憶體,而是指虛擬記憶體大小,這個虛擬記憶體大小取決於磁碟交換區設定的大小。由程式申請的一塊記憶體,如果沒有任何乙個指標指向它,那麼這塊記憶體就洩漏了。

以發生的方式來分類,記憶體洩漏可以分為4類:

發生記憶體洩漏的**會被多次執行到,每次被執行的時候都會導致一塊記憶體洩漏。

發生記憶體洩漏的**只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測記憶體洩漏至關重要。

發生記憶體洩漏的**只會被執行一次,或者由於演算法上的缺陷,導致總會有一塊且僅一塊記憶體發生洩漏。比如,在類的建構函式中分配記憶體,在析構函式中卻沒有釋放該記憶體,所以記憶體洩漏只會發生一次。

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

避免記憶體洩露 迷途指標

記憶體洩露產生 沒有釋放在堆中申請的記憶體。從makecat函式返回乙個指標,之後再main函式裡釋放記憶體。我認為,最好封裝在函式裡,new和delete看起來才有對稱感。還需要再改進。既然提到了,就說一下迷途指標和記憶體洩露的原理和避免方法 迷途指標 將delete用於指標,但沒有將指標置為空而...

怎麼避免財務造假呢

企業 現的財務造假等行為,其自身發展會受到一定的影響,管理者只有合理避免財務部門員工的造假行為,才能夠淨化網路環境,讓企業能夠得到更好的發展。企業想要規避財務風險就需要做好應對的措施,比較簡單的方法就是對會計電腦的桌面使用情況進行管控,管理者可以通過域之盾對員工在電腦使用各種文件和網頁瀏覽等行為進行...

operator 要注意避免記憶體洩露(專案經驗)

指標不論是指向malloc還是new分配得到的記憶體,一定要注意在改變指標指向之前一定要先釋放舊的記憶體塊。class test p char malloc sizeof char test const test c1 test void operator test c2 這裡很重要,a b時,a本...