valgrind检测libevent内存泄露

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[]

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

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

相关文章

往对象数组里面添加相同的key 不同的value

应用场景&#xff1a;后盾字段没有发给你 自己补充数据 <div v-for"item in list" :key"item.id"><p>{{ item.id}} ----> {{ item.name}} --->{{ item.sex }}---> {{ item.tel }}---->{{ item.link}}--插入数据</p></di…

vue 子组件 调用、触发父组件中的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我发现了两种写法。 方法一&#xff1a; 子组件&#xff1a; <template><button click"submit">提交</but…

新手必看一位老司机的十年开车经验

今天&#xff0c;小编为大家收集整理了一个老司机的十年开车经验&#xff0c;新手们一定要学哦&#xff0c;因为这种宝贵的开车经验是我们以后开车过程中每天都要用到的常识。将来无论在什么时候&#xff0c;这种宝贵经验都会给我们带来更安全的行车时光。新手必看的十年开车经…

Protobuf使用

Protobuf使用 github地址 目录 proto3的更新定义协议格式编译protobufprotobuf_API 枚举和嵌套类标准消息方法解析和序列化 写一条消息阅读消息编译Protobuf扩展优化高级用法 proto3的更新 在第一行非空白非注释行&#xff0c;必须写&#xff1a; syntax "proto3&…

大佬(概率期望DP)

首先根据数据范围&#xff0c;可以判断基本上是n^2的复杂度 通过分析我们发现每一次都可以从m个数中任意选&#xff0c;既然任意选&#xff0c;那么此时的概率的分母就是不变的&#xff0c;然而题中涉及的是某一段的最大值&#xff0c;所以我们按套路假设 f[i][j]表示第i天&…

vue 父组件 调用 子组件的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我们都知道通过$ref可以获取到某个DOM&#xff0c;但是它也可以用来获取子组件的实例&#xff0c;调用子组件的方法 例&#xff1a; 子…

新手开车13招技巧

开车是一个靠经验积累技术的过程&#xff0c;新手们往往会在开车时遇到很多问题&#xff0c;我们用本篇文章和新手讲述开车的各种技巧&#xff0c;希望每个新手都能从中受益。第1招技巧&#xff1a;上车前要先看车  上车前绕车转一圈&#xff0c;看车的外况、轮胎、车底下有没…

高效的数据压缩编码方式 Protobuf

高效的数据压缩编码方式 Protobuf github地址 目录 ProtocolBuffers 是什么为什么要发明 ProtocolBuffersproto3 定义 Message 分配字段编号保留字段默认字段规则各个语言标量类型对应关系枚举枚举中的保留值允许嵌套枚举不兼容性更新 Message未知字段Map 类型JsonMapping p…

解决 VUE前端项目报错:RangeError: Maximum call stack size exceeded

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 我点击菜单按钮报错&#xff1a; RangeError: Maximum call stack size exceeded 2. 原因&#xff1a;参数传递有问题或者方法调用有…

新手必须掌握的学车技巧-上坡起步

我们知道&#xff0c;做什么事情都是万事开头难&#xff0c;新手们在学车方面更能体会到这一点&#xff0c;正确掌握学车技巧对于新手来说是非常重要的事情&#xff0c;今天&#xff0c;平安学车网&#xff08;www.paxcw.com&#xff09;就会大家探讨一下我们学车时必须掌握的是…

高效的序列化/反序列化数据方式 Protobuf

高效的序列化/反序列化数据方式 Protobuf github地址 目录 protocolBuffers 序列化 Int32StringMapslice序列化小结 protocolBuffers 反序列化 Int32StringMapslice序列化小结 序列化/反序列化性能最后 protocolBuffers序列化 上篇文章中其实已经讲过了 encode 的过程&…

如何配置一个Oracle服务

1、网络服务名&#xff1a;即填写OracleTNS的值&#xff0c;如OracleTNSorcl_192.168.1.125&#xff0c;填写orcl_192.168.1.1252、主机名&#xff1a;192.168.1.1253、服务名&#xff1a;orcl4、测试成功即可。 转载于:https://www.cnblogs.com/dengshiwei/p/4258719.html

解决 VUE前端项目报错: Uncaught ReferenceError : initPage is not defined (initPage 方法是有的,依旧报错找不到)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 明明代码中定义了 initPage 这个方法&#xff0c;&#xff0c;却一直报找不到这个方法&#xff1a; Uncaught ReferenceError: init…

掌握新手学车技巧对于新手来说是非常重要的

刚开始学车的时候对于新手来说很多操作不知道从哪里下手&#xff0c;这个时候&#xff0c;如果按照相关的学车技巧来学习的话&#xff0c;对于新手来说是非常有好处的。下面我们就来学习一下让新手们可以快速进入开车状态的学车技巧吧&#xff01;基本上驾校的教练都会教学员把…

iView学习笔记(三):表格搜索,过滤及隐藏列操作

iView学习笔记(三)&#xff1a;表格搜索&#xff0c;过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本&#xff1a;3.6.6 Django版本&#xff1a;1.11.8 数据库&#xff1a;MariaDB 5.5.60 新建Django项目&#xff0c;在项目中新建app&#xff0c;配置好数据库 api_test…

Jenkins自动编译库并上传服务器

Jenkins自动编译库并上传服务器 github地址 首先添加 git 地址&#xff1a; 再添加定时构建&#xff0c;每天夜里构建一次&#xff1a; 执行 shell 脚本进行构建 cd networklayerecho "build json x86" cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPERele…

解决:The “data“ option should be a function that returns a per-instance value in component definitions

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 只是想定义一个变量&#xff0c;方便页面上调用 。 报错&#xff1a; The "data" option should be a function that re…

科目三考试里面的会车,调头,靠边停车通过标准

科目三会车&#xff1a;减速靠道路的右侧边缘线行驶&#xff0c;速度要减到20km/h以下&#xff0c;靠右以不压右侧边缘线为基准尽量靠右。会车结束指令发出后向左打方向回到道路中央。考点&#xff1a;1.速度要降到20km/h&#xff0c;有时考官故意刁难&#xff0c;会在直线行驶…

Esxi直通板载Sata

Esxi安装好后&#xff0c;打开SSH。 解决方法如下&#xff1a; shell下执行&#xff1a; lspci -v | grep "Class 0106"-B 1&#xff0c;查看是否有如下显示&#xff1a;0000:00:1f.2 SATAcontroller Mass storage controller: Intel Corporation Lynx Point AHCICon…

gdb 调试 TuMediaService

gdb 调试 TuMediaService github地址 起因 首先需要有 armgdb 环境运行 ./armgdb ./TuMediaService 进入 gdb 模式b hi3531_trcod_interface.cc:98 打断点r 运行程序print this->vdec_config_path_ 打印关键值 在这里我们关注的值已经被修改&#xff0c;由于程序中没有刻…