之前寫**,有少量的記憶體洩露,平時沒發現,長時間執行才發現問題。為以後更方便的檢測記憶體洩漏問題,於是學習使用了valgrind來對記憶體洩漏進行檢測。valgrind不止可以檢測記憶體洩露,但目前只使用這一功能。
./configure
make
make install
如遇提示許可權不夠,make前加sudo
如果想驗證是否安裝完成,在終端輸入valgrind --version
,若安裝成功,會輸出相應版本,如圖
終端進入可執行檔案所在的資料夾,輸入
valgrind --tool=memcheck --leak-check
=full
--show-leak
-kinds
=all
--undef-value
-errors
=no --
log-file
=log
./可執行檔名
即可在終端所在資料夾下生成log檔案,如圖
在log檔案最後會有個summary,其中對記憶體洩露進行了分類,總共有五類:
(1) 「definitely lost」 意味著你的程式一定存在記憶體洩露;
(2)」indirectly lost」意味著你的程式一定存在記憶體洩露,並且洩露情況和指標結構相關
(3) 「possibly lost」 意味著你的程式一定存在記憶體洩露,除非你是故意進行著不符合常規的操作,例如將指標指向某個已分配記憶體塊的中間位置。
(4) 「still reachable」 意味著你的程式可能是沒問題的,但確實沒有釋放掉一些本可以釋放的記憶體。這種情況是很常見的,並且通常基於合理的理由。
(5)」suppressed」 意味著有些洩露資訊被壓制了。在預設的 suppression 檔案中可以看到一些 suppression 相關設定。
其中,如果二叉樹的根節點被判定為」definitely lost」,則其所有子節點將被判定為」indirectly lost」,而如果你正確修復了型別為 「definitely lost」 的根節點洩露,那麼型別為 「indirectly lost」 的子節點洩露也會隨著消失。
對於如上圖所示的情況,posslbly lost其實並沒有造成記憶體上的影響,如果想要過濾掉該類報告資訊,可以加入--show-possibly-lost=no
,而對於」still reachable」 ,同樣可以通過--show-reachable=yes
來控制是否輸出相應的資訊。
如果某些需要的庫沒有找到,用指令
export ld_library_path=/usr/local
/mysql/lib
:$ld_library_path
進行新增
在log中由summary往上翻即可看到對應的錯誤,錯誤是不斷細化的,比如
這樣的是乙個錯誤,先告訴你出現了多少的記憶體洩露,然後從最裡層不斷往外部函式顯示:先說是calloc造成的錯誤,然後不斷往外部函式顯示。可以從下往上進行檢視,比如先說main()函式發生了洩露,往上看到是main()中的init()函式,再往上init()中的init_detectionmodel,如此不斷細定位洩露位置。
使用valgrind來檢查記憶體洩漏
之前寫 有少量的記憶體洩露,平時沒發現,長時間執行才發現問題。為以後更方便的檢測記憶體洩漏問題,於是學習使用了valgrind來對記憶體洩漏進行檢測。valgrind不止可以檢測記憶體洩露,但目前只使用這一功能。1.安裝 configure make make install 如遇提示許可權不夠,m...
記憶體檢查工具valgrind
valgrind是一套linux下的開放源 的 除錯工具的集合。valgrind由核心以及基於核心的其他除錯工具組成。valgrind包括以下的一些工具 在了解valgrind之前可以了解一下linux程式記憶體空間布局 0指定安裝路徑和生成makefile configure prefix hom...
安裝Valgrind並檢查記憶體洩露
第二種方式 使用二進位製包安裝,以ubuntu 14.04 64bit為例,輸入下面的安裝命令 sudo apt get install valgrind 所以最好的方法,我選擇下面的第三種方法 valgrind使用方法 用法 valgrind options prog and args optio...