linux下檢測內存泄漏工具Valgrind |
發(fā)布時間: 2014/8/12 11:03:36 |
linux下檢測內存泄漏工具Valgrind簡介 在我們編寫C/C++的時候,最常見的錯誤之一就是內存泄露,這樣的問題其實跟程序員的編程習慣密不可分。如果你在虛擬主機申請內存空間之后能夠馬上在合適的位置釋放內存。會極大程度的避免內存泄漏的情況。但是人非圣賢,孰能無過。有時候我們確實忘記釋放內存而導致了比較嚴重的錯誤,所以這個時候我們需要借助valgrind這個工具來判斷內存泄漏。 Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的內存調試工具,它可以對編譯后的二進制程序進行內存使用監(jiān)測(C語言中的malloc和free,以及C++中的new和delete),找出內存泄漏問題。 Valgrind 中包含的 Memcheck 工具可以檢查以下的程序錯誤: 使用未初始化的內存 (Use of uninitialised memory) 使用已經釋放了的內存 (Reading/writing memory after it has been free’d) 使用超過malloc分配的內存空間(Reading/writing off the end of malloc’d blocks) 對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack) 申請的空間是否有釋放 (Memory leaks – where pointers to malloc’d blocks are lost forever) malloc/free/new/delete申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete []) src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions) 重復free valgrind的使用實例: 在官網上找到valgrind的tar包,解壓,編譯。完成后make安裝:
編譯到制定位置:
安裝valgrind:
完成之后我們就可以對系統(tǒng)中的程序進行檢測了,首先我們用ls顯示根目錄下的文件,ls命令是沒有內存泄漏的:
為了體現valgrind 的檢錯功能,我們故意編寫一個只malloc沒有free的C程序:
編譯鏈接后使用valgrind進行檢測,發(fā)現有內存泄漏:
然后我們在C程序中釋放內存:
再次編譯鏈接完成后使用valgrind檢測:
這次則顯示我們申請并且釋放了400B的空間,體現了valgrind的強大作用。 有這樣的檢錯工具當然很好,但是我更認為程序員應該始終頭腦清醒,知道自己的程序在做什么,記得這個忠告,如果你的語言沒有垃圾回收機制。那么在申請一塊內存之后先不要做任何操作,先在合適的位置釋放內存。畢竟好借好還,再借不難么。 本文出自:億恩科技【1tcdy.com】 |