Unix下c程序内存泄露检测工具

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。

Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。

Valgrind遵守GNU通用公共许可证条款,是一款自由软件。

官网

http://www.valgrind.org

下载与安装

#wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2 #tar xvf valgrind-3.8.1.tar.bz2 #cd valgrind-3.8.1 #./configure --prefix=/usr/local/webserver/valgrind #make #make install

测试代码

[cpp] view plaincopy

#include <stdlib.h> 
int* func(void)  
{  
 int* x = malloc(10 * sizeof(int));  
   x[10] = 0;  //问题1: 数组下标越界 
}                    
 int main(void)  
{  
 int* x=NULL;  
   x=func();  
 //free(x);   
   x=NULL;  
 return 0;   //问题2: 内存没有释放 
 }  

编译

#gcc -g -o test test.c

内存检查 #valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./test

报告:

说明

 Invalid write of size 4:表示数组越界写了4字节

40 bytes in 1 blocks:表示因程序退出而发生内存泄露40字节

修复bug,重新检查提示已经没有内存泄露

文档:

Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:   使用未初始化的内存 (Use of uninitialised memory)   使用已经释放了的内存 (Reading/writing memory after it has been free’d)   使用超过malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)   对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)   申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)   malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])   src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)   重复free

  1. 其他参考工具:likwid  http://code.google.com/p/likwid/downloads/list

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

Kafka源码系列之分组消费的再平衡策略

一,Kafka消费模式 从kafka消费消息,kafka客户端提供两种模式: 分区消费,分组消费。 分区消费对应的就是我们的DirectKafkaInputDS...

1K6
来自专栏青青天空树

MIME协议在邮件中的应用详解

  全称是多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions),在MIME出台之前,使用RFC 822只...

1841
来自专栏软件测试经验与教训

LR windows计数器

2784
来自专栏腾讯云实验室

玩转 Jupyter Notebook

腾讯云提供了开发者实验室教你玩转 Jupyter Notebook,教程内容如下,用户可以点击开发者实验室快速上机完成实验。

1.5K3
来自专栏FD的专栏

Brainfuck JIT Compiler in Rust

我们都知道,对于解释型的语言实现来说,性能是大家关注的焦点。比如,这位 Tondbal ik Ni 曾经还说过:

1663
来自专栏企鹅号快讯

盘点开发者最爱的 IntelliJ 插件 Top 10

关键时刻,第一时间送达! IntelliJ的十大插件?相信每个人都有自己的选择。我们也同样如此。在这里,我们为您带来我们认为的十大IntelliJ插件。 如果你...

1957
来自专栏linux驱动个人学习

Dos烧录脚本

Dos命令之前更改的太简单,现在加入判断是否进入fasboot模式和判断Android镜像是否存在;代码已经尽量简化成这样,dos命令功能还是比较不好用的,用了...

3575
来自专栏iOS技术

YYCache 源码剖析:一览亮点

YYCache 作为当下 iOS 圈最流行的缓存框架,有着优越的性能和绝佳的设计。笔者花了些时间对其“解剖”了一番,发现了很多有意思的东西,所以写下本文分享一下...

4785
来自专栏小狼的世界

Crontab中的除号(slash)到底怎么用?

crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要注意的地方...

1002
来自专栏我的技术专栏

Socket编程(4)TCP粘包问题及解决方案

1253

扫码关注云+社区

领取腾讯云代金券