1.什麼是內存泄露?
內存泄露指的是應用程序在分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
2.造成內存泄露的原因是什麼?
一般情況下造成內存泄露的主要原因是,由於程序設計的不合理,未對動態申請的堆空間進行回收,或者只在程序的部分出口對申請的內存空間進行回受,從而導致被某個程序棄用卻不能被其他程序使用的內存越來越多。
3.內存泄露帶來的危害:
4.如何檢測內存泄露?
a.使用相關命令,如ps,top等
源文件如下:通過分析源程序可以看出,在greeting函數中,當程序向操作系統申請內存後,未對其進行釋放操作後,就直接返回主函數,而且主函數不斷地調用greeting函數,導致內存一直在泄露中
- 使用ps命令進行分析
在一個終端中運行程序:在另一個終端中查看內存狀態:程序運行前內存狀態:每隔一段時間檢查一次內存狀態:通過分析,我們可以看到,program1程序佔用的內存越來越大
- 使用top命令進行分析
同樣地在一個終端中運行程序,然後在另一個終端中觀察狀態:通過分析,我們可以看到,program1程序佔用的內存越來越大b.進行靜態分析,如使用工具mtrace
修改源程序: 添加頭文件,並且用mtrace()和muntrace()兩條語句將要檢測內存泄露的代碼塊包含起來編譯程序並用該環境變量來定義一個文件log用於輸出:運行程序:
log文件分析:
日誌中一連串的"+"號表示程序一直在申請內存空間,(若有“-”號,表示程序在釋放空間)c.進行動態分析,如如使用valgrind或者memwatch等工具等
將第二步修改的代碼註釋掉:
使用valgrind 命令並運行程序:
查看目錄文件:
日誌中提示有內存塊丟失