Valgrind应用基础-预防C程序内存泄露

初写C/C++程序,比较头疼的应该就是内存问题,本篇介绍一个帮助程序员调试定位常见内存问题;当然这个任务可以通过GDB完成(参见:GDB使用详解

 

开始本篇前,请先确认调试程序采用Debug模式编译(编译时开启-g选项);

 

1、安装

 

下载地址:http://valgrind.org/downloads/

 

切换到Valgrind目录,并执行下面的命令:

 

./configure

make

make check

make install

 

2、调试

 

假设你的程序执行命令是:myprog arg1 arg2

 

使用Valgrind调试时执行:valgrind --leak-check=yes myprog arg1 arg2

 

3、举例:

 

假设你的程序有如下片段:

 

 

 

执行后会收到如下信息:

 

 

 

1、“==19182==”表示进程ID

 

2、“Invalid write of size 4”显示错误类型,这里是由于写内存堆块溢出

 

3、第二行开始显示发生问题的位置,如:“example.c:6”表示example.c的第6行代码,掌握跟踪顺序对调试很有帮助,通常顶部是最内层,底部是最外层

 

上诉例子中还存在内层泄露的问题,你会看到如下的信息:

 

 

1、“40 bytes in 1 blocks are definitely lost in loss record 1 of 1” 展示了Valgrind的分析包括,“definitely lost”-绝对损失,“probably lost”-可能损失

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值