linux使用valgrind 工具检查内存泄露

转载网址:http://hi.baidu.com/original/blog/item/bc5308f7651dcf22720eeca5.html

 

使用valgrind来管理cpp程序的内存

Valgrind是一款非常强大的工具集合,它包含有包括内存检测、CPU监测等多种工具,其中最常用的是内存检测功能,它能监测出以下的各种内存错误:
1. 访问非法内存区域
2. 使用未被初始化的内存区域
3. 非法释放内存,比如多次free一个内存
4. 内存泄露

使用步骤:
1. 使用valgrind前需要使用-g参数编译源程序以便生成debug信息
2. 在运行程序的命令行前加上valgrind,例如:valgrind myprog argvlist
   为了能够给出内存检测报告,需要加上--leak-check参数,那么上述命令就变成:valgrind --leak-check=yes myprog argvlist
   这个时候程序运行会非常慢,消耗资源也会大幅增加,这是正常的,不必担心。因为valgrind需要收集内存错误和泄露的详细信息。这被有些人认为是valgrind的缺点,但是对于一个大项目来说,这一点时间的消耗来监测程序的稳定性是值得的。
3. 阅读valgrind给出的报告
valgrind的其它参数:
--num-callers=N:指定报告中调用栈的层数,这在定位和跟踪错误的时候会比较有用
-v :可以打印出更加详细的信息
valgrind的报告:
"Invalid write/read...":这一般是访问非法的内存区域,比如数组越界等
"Conditional jump or move depends on uninitialised value(s)":使用了未初始化的变量(包括未初始化的局部变量和未初始化的堆区域)
"Mismatched free() / delete / delete []":这一般是非法释法内存的错误,比如多次free一个内存
"LEAK SUMMARY":这表示下面是内存泄露的信息(造成内存丢失的程序行可以通过查看这一行前面的清单来定位)
"definitely lost":肯定丢失的部分,这种报告必须处理
"possibly lost":可能丢失的部分,这是由于C/C++语言指针处理的特点造成的,这部分可能不太准确
 
 
这里只有一个简单的介绍,更多详细信息参见valgrind的官方网站: http://valgrind.org/docs/manual/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值