Unix下C程序内存泄漏检测工具Valgrind安装与使用

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
  1. #include <stdlib.h>  
  2. int* func(void)  
  3. {  
  4.    int* x = malloc(10 * sizeof(int));  
  5.    x[10] = 0;  //问题1: 数组下标越界  
  6. }                    
  7.  int main(void)  
  8. {  
  9.    int* x=NULL;  
  10.    x=func();  
  11.    //free(x);    
  12.    x=NULL;  
  13.    return 0;   //问题2: 内存没有释放  
  14.  }  


编译

#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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hibernate保存失败_Hibernate:保存与保存并保存或更新

hibernate保存失败save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题&#xff0c;就像Hibernate中get和load方法之间的区别一样。 Hibernate Session类提供了几种通过save &#xff0c; saveOrUpdate和persist等方法将对象保存…

BZOJ 2957 楼房重建-线段树

这个题最主要的是解决一个统计答案的问题。 首先我们注意到&#xff0c;只要考虑右区间的答案统计就好了。 记左区间的最大值为K&#xff0c;当前右区间为P。 我们把当前右区间又分成两个子区间&#xff0c;s1,s2。 那么如果s1的最大值比K小&#xff0c;那么显然只要递归处理s2…

matlab 移动平均_两所高校被禁用MATLAB背后,是工业设计能力之争

不管是MATLAB&#xff0c;还是EDA&#xff0c;都指向了中国核心工业软件缺失的问题。 作者&#xff5c; Decode 邮箱&#xff5c;oudibjoutlook.com来源丨人民数字与品玩联合出品一款工科软件&#xff0c;最近成为科研界议论的焦点。2020 年 6 月 6 日开始&#xff0c;哈尔滨工…

MySQL 当记录不存在时insert,当记录存在时update

MySQL 当记录不存在时insert&#xff0c;当记录存在时更新 网上基本有三种解决方法。 第一种&#xff1a; 示例一&#xff1a;insert多条记录 假设有一个主键为 client_id 的 clients 表&#xff0c;可以使用下面的语句&#xff1a; INSERT INTO clients (client_id, client_na…

如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

英文原文&#xff1a;How to Detect Memory Leaks Using Valgrind memcheck Tool for C / C 系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统&#xff0c;你就需要面对越多的内存问题。有时这些问题非常琐碎&#xff0c;而更多时候它会演变成一个…

如何在Activiti中使用瞬态变量

我们昨天发布的Activiti v6 Beta3中已经加入了一个非常需要的功能-临时变量。 在本文中&#xff0c;我将向您展示一个示例&#xff0c;该示例说明如何使用瞬态变量来覆盖一些以前不可能&#xff08;或最佳&#xff09;的高级用例。 到目前为止&#xff0c;Activiti中的所有变量…

python羊车门问题_「羊车门」经典概率题中不换门选中车的概率是多少?

今天用Python求解「羊车门」经典的概率问题,对概率学基础和Python语法的灵活运用有所收货.本次「羊车门」求解过程采用的是:穷举法计算概率已验证概率学基础理论.期间重点借鉴了奥卡姆剃刀的博客和 南葱&#xff1a;「羊车门」经典概率题中不换门选中车的概率是多少&#xff1f…

非标协议外设LCD1602

概述 LCD1602 &#xff08; Liquid Crystal Display &#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602 即 32 字符 (16 列两行) 引脚说明 第 1 脚 : VSS 为电源地 第 2 脚 : VDD 接 5V 正电源 第 3 脚 : VL 为液晶显示器对比度调整端 , 接正电源…

50: Luogu P4568 分层图

分层图最短路模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <ctime> #include <queue> #include <cstring>using namespace std;const int M 2e6 5e5 10;#define gc getchar() inline int read() {int x 0…

C++编程笔记:dll的生成与使用

1.动态链接库&#xff08;dll&#xff09;概述 没接触dll之前觉得它很神秘&#xff0c;就像是一个黑盒子&#xff0c;既不能直接运行&#xff0c;也不能接收消息。它们是一些独立的文件&#xff0c;其中包含能被可执行程序或其他dll调用来完成某项工作的函数&#xff0c;只有在…

如何通过IP地址分辨公网、私网、内网、外网

如何通过IP地址分辨公网、私网、内网、外网内、外网是相对于防火墙而言的&#xff0c;在防火墙内部叫做内网&#xff0c;反之就是外网。在一定程度上外网等同于公网&#xff0c;内网等同于私网。地址为如下3个区域就是处于私网&#xff1a;1&#xff1a;10.*.*.*2&#xff1a;1…

python画动态表情包_真香!一行Python代码,帮你制作小姐姐的表情包,靠谱吗?...

原标题&#xff1a;真香&#xff01;一行Python代码&#xff0c;帮你制作小姐姐的表情包&#xff0c;靠谱吗&#xff1f;(我的IU女神)对于小姐姐的动态表情包&#xff0c;相必我们大多数人都不会拒绝&#xff0c;而且都会选择默默的将其收藏(不要问我怎么知道的)&#xff0c;一…

mongodb分片

mongodb分片&#xff1a; 本次是用三台主机搭建3个集群&#xff08;主、备、仲裁&#xff09;作为三个分片&#xff0c;一个集群&#xff08;主、备、备&#xff09;做为config服务器&#xff0c;三个mongos单点做路由&#xff0c;每台5个&#xff0c;一共15个。 新建一个mongo…

批量添加PDF帐号目录

本文参考&#xff1a;https://blog.csdn.net/qq_34104395/article/details/78766400然后根据需要整理的。如作者介意请留言&#xff0c;本人会尽快处理&#xff01; 准备材料&#xff1a; 下载工具FreePic2Pdf&#xff08;在本博客上传资料上找PDF转换工具包&#xff09; 找到…

驳斥5条普通流Tropes

我刚读完“ JDK 8收集器的强大功能的一种例外” &#xff0c;我不得不说我很失望。 Java冠军 Simon Ritter是Oracle的前Java推广者&#xff0c;现在是Oracle的Java传播者&#xff0c;现在是Azul Systems的副CTO&#xff08;使用JVM的人 &#xff09;写了它&#xff0c;因此我希…

私网IP如何访问Internet

公网、内网是两种Internet的接入方式。 内网接入方式&#xff1a;上网的计算机得到的IP地址是Inetnet上的保留地址&#xff0c;保留地址有如下3种形式&#xff1a; 10.x.x.x 172.16.x.x至172.31.x.x 192.168.x.x 内网的计算机以NAT&#xff08;网络地址转换&#xf…

钉钉机器人发送图片 python_python封装钉钉Webhook机器人消息发送逻辑

python封装钉钉Webhook机器人消息发送逻辑&#xff0c;目前仅支持python2。安装pip install dingmsgapi初始化实例from ding_msg_api import MsgClient# Webhook机器人access_tokenmsgClient MsgClient("****************")发送Text消息from ding_msg_api import Te…

[LevelDB] 写批处理过程详解

leveldb的write代码初看瞎搞一堆&#xff0c;细看则实为短小精悍。1 Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { 2  // -----A begin------- 3 Writer w(&mutex_); 4 w.batch my_batch; 5 w.sync options.sync; 6 w.d…

关于excel vba 使用CopyFromRecordset出现格式问题的解决方法

关于excel vba 使用CopyFromRecordset出现格式问题的解决方法 出现问题的写法&#xff1a; With ActiveSheet .Name k(i) For num 1 To UBound(myArray) .Cells(1, num) myArray(num, 1) Next num .rang…

python histo 改变 bins 大小_在Python中显示具有非常不均匀的bin宽度的直方图

这是直方图为了生成这个图,我做了&#xff1a;bins np.array([0.03, 0.3, 2, 100])plt.hist(m, bins bins, weightsnp.zeros_like(m) 1. / m.size)但是,正如您所注意到的,我想绘制每个数据点的相对频率的直方图,只有3个不同大小的区间&#xff1a;bin1 0.03 – > 0.3bin…