使用valgrind定位内存泄露

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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。

以上是关于使用valgrind定位内存泄露的主要内容,如果未能解决你的问题,请参考以下文章

聊一聊 Valgrind 监视非托管内存泄露和崩溃

Unix下C程序内存泄露检测工具:valgrind的安装使用

Linux下检测内存泄露的工具 valgrind

Linux下利用Valgrind工具进行内存泄露检测和性能分析

linux下内存泄露检测工具Valgrind

如何在linux下检测内存泄露