valgrind检测libevent内存泄露

github地址

在使用封装好的http库时,遇到了如下的内存泄露,一开始在definitely处还存在泄露,这里就不贴图了,已经被淹没了。

根据提示定位出错代码位置,如下图:

这里提示evhttp_new这里出现了泄露,我们先到http库中解决已经存在的内存泄露,在析构函数里已经对这一块做了处理如下图:

这里有一个注意点,因为这里是单独起的线程运行的event_base_dispatch(event_base_);,所以我们在event_base_loopbreak后,需要等线程执行完毕后,在释放event_base_free(event_base_);,这里还需要执行libevent_global_shutdown();,否则still reachable:部分还会存在泄露。还有一处地方存在泄露,在昨天用同样的方法定位到的,这里记录一下:

左边是之前出现泄露的情况,右边是修改后的代码。改完这些后,我们在http库下运行测试程序,发现:

已经没有泄露了,剩下来的72704 bytes in 1 blocks是和gcc版本有关,在gcc 7.40上是没有这个问题的。库的内存泄露解决了,下面我们到生产环境中去,发现还是存在泄露,明明我们在析构中已经做了处理,我在库代码中加入了日志信息,发现并没有进入析构函数,也就没有执行回收的代码,出现了内存泄露。定位到原因在这里:

我们需要把这里的类声明去掉,具体原因见我另一篇文章。最终将所有存在内存泄露都给解决了。

附录:memcheck 常见错误

  • 使用未初始化的内存
==1001== Use of uninitialised value of size 8
  • 在内存被释放后进行读 / 写
==1001== Invalid read of size 1
  • 从已分配内存块的尾部进行读 / 写
==1001== Invalid read of size 1
  • 内存泄露
==1001== LEAK SUMMARY
  • 不匹配地使用 malloc/new/new []free/delete/delete []
==1001== Mismatched free() / delete / delete []
  • 两次释放内存
==1001== Invalid free() / delete / delete[]

valgrind检测libevent内存泄露相关推荐

  1. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  2. linux下利用valgrind工具进行内存泄露检测和性能分析

    http://blog.csdn.net/yanghao23/article/details/7514587 valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简 ...

  3. Linux valgrind java_linux下利用valgrind工具进行内存泄露检测和性能分析

    valgrind通常用来成分析程序性能及程序中的内存泄露错误 一 Valgrind工具集简绍 Valgrind包含下列工具: 1.memcheck:检查程序中的内存问题,如泄漏.越界.非法指针等. 2 ...

  4. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露

    valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...

  5. valgrind 报告 ecpg内存泄露 (三)

    valgrind为何 报 ecpg内存泄露错误?根据我的同事的研究成果: 究其原因,全局变量 sqlca 由malloc形成,但是释放时是隐含的: ecpg_sqlca_key_destructor函 ...

  6. 使用MLeaksFinder检测项目内存泄露总结

    前几天看到开源工具MLeaksFinder,决定用在公司的项目中试一下,效果很不错,用法也很简单,直接把项目文件夹拖到项目中就可以了,依靠这个项目,我发现公司项目中有不少内存泄露的地方,在此总结一下: ...

  7. android oom 检测工具,Android中UI检测、内存泄露、OOM、等优化处理

    对Android整个优化分析,非常棒,下面是自己的积累笔记.可直接看原文. 界面检测工具: Fps: GPU检测, 使用Lint进行资源及冗余UI布局等优化 (很强大,布局的冗余) Memory检测G ...

  8. 检测java内存泄露_MAT 检测 Java内存泄露检测

    一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...

  9. android内存泄漏检测,Android内存泄露检测之LeakCanary的使用

    开始使用 目前为止最新的版本是2.3版本,相比于2.0之前的版本,2.0之后的版本在使用上简洁了很多,只需要在dependencies中加入LeakCanary的依赖即可.而且debugImpleme ...

最新文章

  1. 清华连续三年稳坐亚洲第一!西交利物浦成今年黑马 | 2021泰晤士亚洲大学排名...
  2. MySQL下载与MySQL安装图解(MySQL5.7与MySQL8.0)
  3. SharePoint Workflow 基础
  4. 【Python SQLAlchemy】数据库连接池SQLAlchemy中多线程安全的问题
  5. 网站决策分析软件WebBI
  6. pom.xml配置文件配置jar(不用记,快速配置)
  7. VC+ADO+Access2000数据库文件密码的设置和修改
  8. congatec AG acquires Real-Time Systems GmbH
  9. 转 android anr 分析示例,Android ANR 分析与解决
  10. 信息系统开发平台OpenExpressApp - 从compositewpf到MEF
  11. aswing学习笔记2-不规则外框-请教思路
  12. 让 Edit 只接受数字《转》
  13. echarts官网打不开。
  14. 如何解决网站不安全信息?免费SSL证书
  15. 【Java】根据生日计算年龄
  16. 电脑共享文件打不开要如何解决
  17. 仿网易云音乐网站(加入个人社区)
  18. 什么是互联网产品的运营?,互联网营销
  19. 【专利撰写】专利类型
  20. google earth engine随缘学习(十一)影像分割

热门文章

  1. php整站防注入程序,一个不错的php通用防注入程序
  2. oracle idl_ub1$,system表空间急剧增大原因分析
  3. 关于c语言的英文论文,C语言论文外文翻译.doc
  4. 计算机专业会议评级,2018计算机专业工程教育认证研讨会
  5. 数组填充php,php数组入门教程之数组填充
  6. java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟
  7. python找最长的字符串_为Python找到最长重复字符串的有效方法(从Pearls编程)
  8. 接入上文,StarWind V2V Image Converter:虚拟机镜像转换工具,如何使用转化之后的 VMware VMDK 文件
  9. C++primer 第 4 章 表达式 4.1基础 4 . 2 算术运算符 4 .3 逻辑和关系运算符 4 . 4 赋值运算符 4 .5 递增和递减运算符 4.6成员访问运算符
  10. 区块链相关问题 理解