使用valgrind定位內存泄露


簡單備忘一下,valgrind的用法:

 

valgrind --tool=memcheck --leak-check=full --log-file=a.log ./a.exe

其中:

  --tool指定工具;

  --leak-check指定檢測級別;

  --log-file指定輸出到文件,不給出這個字段則輸出到屏幕打印。

 

valgrind的錯誤含義:(轉自http://blog.csdn.net/ai2000ai/article/details/51131645)

Conditional jump or move depends on uninitialised value(s)
診斷信息A 程序行為可能與策略預期不一致,請仔細核查!
診斷信息B XXXgz導致的警告,主要是因為機器字節對齊填充了沒有初始值的數據導致!
對應兩個警告信息,如果是調用XXX_gzip引出的警告,則輸出信息B,否則信息A。

Warning: set address range perms: large range
診斷信息 此警告可忽略!
只對應一條信息。

Syscall param *(buf) points to uninitialised byte(s)
診斷信息 請確認此系統函數所使用的參數是否需要初始化!
只對應一條信息。

Invalid read of size *
診斷信息 讀取無效內存地址錯誤!
只對應一條信息。

Process terminating with default action of signal (): dumping core
診斷信息 程序執行期間出core!
只對應一條信息。

Use of uninitialised value of size
診斷信息 請確認此內存地址不需要初始化!
只對應一條信息。

* bytes in * blocks are possibly lost in loss record * of *
診斷信息A 內存可能存在泄露!
診斷信息B glibc內部的內存泄露的問題,可以忽略!
對應兩條信息,如果發現valgrind警告的調用堆棧出現pthread_creat則返回信息B,否則返回信息A。

(* direct, * indirect) bytes in * blocks are definitely lost in loss record * of *
診斷信息 內存泄露錯誤!
只對應一條信息。

Invalid write of size
診斷信息 寫入無效內存地址錯誤!
只對應一條信息。

Mismatched free() / delete / delete[]
診斷信息 請確保malloc的內存用free釋放,new的內存用delete釋放!
只對應一條信息。

Source and destination overlap in cpy(, *)
診斷信息A 致命錯誤,程序行為不符合策略預期!
診斷信息B 行為未定義,完全依賴glibc的實現,不具有可移植性!
對應兩條信息,如果復制的源地址小於目的地址則返回信息A,否則返回信息B。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: