在VS2013平台下如何快速解决c++代码内存泄漏问题

在学习FPS3000人脸关键点定位算法时,发现github上的源码,存在大量的内存泄漏问题,在训练的时发现内存一直在增长,测试的时候也存在内存无法彻底释放的问题。

一直以为是存放模型参数vector<class>结构的问题, 采用以下方法手动释放,仍然无法解决问题。

 

  1. vector<class> regressors_;
  2. regressors_.clear();
  3. std::vector<Regressor>().swap(regressors_);

经过仔细检查发现,有好几个类没有析构函数,于是就添加了CascadeRegressor::~CascadeRegressor();Regressor::~Regressor();RandomForest::~RandomForest();Node::~Node();由于class类不支持手动释放,只能在析构函数里自动释放内存。而且还发现有很多new()和#define Malloc(type,n) (type *)malloc((n)*sizeof(type))手动方式分配的内存没有手动释放。

 

那我是怎么发现的呢?方法如下:

一、在VS2013的DeBug模式下在代码中添加如下代码:

 

  1. #include <stdlib.h>
  2. #include <crtdbg.h>
  3. #ifdef _DEBUG
  4. #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
  5. #endif
  6. void EnableMemLeakCheck()
  7. {
  8. int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
  9. tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
  10. _CrtSetDbgFlag(tmpFlag);
  11. }
  12. using namespace std;
  13. int main()
  14. {
  15. EnableMemLeakCheck();
  16. //_CrtSetBreakAlloc(3558059);
  17. 此处添加自己的代码
  18. }

 

二、然后编译执行程序,如果代码中存在内存泄漏,则在程序终止时,输出端口看到如下内容:

 

  1. 线程 0x1b24 已退出,返回值为 0 (0x0)。
  2. Detected memory leaks!
  3. Dumping objects ->
  4. {3558059} normal block at 0x0000000007F11480, 62544 bytes long.
  5. Data: < y W] > CC AD FF AD AA 1B A2 BE 79 9E 57 5D E2 8E FE BE
  6. {3558049} normal block at 0x0000000007CB98F0, 88 bytes long.
  7. Data: < > 0C 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD
  8. {3558025} normal block at 0x0000000007EF1A90, 62544 bytes long.
  9. Data: < FR > .u ?> E2 CB 46 52 DD 11 E1 3E CB C9 93 2E 75 BE 00 3F
  10. {3558015} normal block at 0x0000000007CBA170, 88 bytes long.
  11. Data: < > 0C 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD

 

从以上log中可以看到3558059的地方存在内存泄漏,那我们可以把main()函数中的这个函数去掉注释,

 

 

  1. int main()
  2. {
  3. EnableMemLeakCheck();
  4. _CrtSetBreakAlloc(3558059);
  5. 此处添加自己的代码
  6. }



 

然后重新编译并执行程序,代码就会run到内存泄漏的地方就停下来。

此法对于查找内存泄漏非常方便。

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

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

相关文章

python请简述构造函数和析构函数的作用_python – 构造函数和析构函数如何工作?...

我正在尝试理解这段代码&#xff1a;class Person:Represents a person population 0def __init__(self,name)://some statements and population 1def __del__(self)://some statements and population - 1def sayHi(self):grettings from personprint Hi My name is %s % s…

服务器应用日志清理,Linux下Tomcat日志定期清理

服务器上的tomcat的catalina.out文件越来越大&#xff0c;查看起来很不方便&#xff0c;以前每次都是想起来的时候手工清理一下(cat /dev/null > catalina.out)&#xff0c;后来发现了logratate这个工具&#xff0c;Ubuntu下的mysql,nginx好像也是用的这个工具还定期整理log…

dubbo简易监控中心安装

dubbo简易监控中心也是dubbo服务应用。 为什么叫“简易”&#xff1f;这是阿里巴巴定义的&#xff0c;意思是功能不多但够用&#xff0c;可以自己扩展。 1、下载dubbo源码&#xff0c;要与使用的dubbo版本一致。 https://github.com/alibaba/dubbo/releases 2、maven instal…

前端架构设计1:代码核心

现在的前端领域, 随着JS框架, UI框架和各种库的丰富, 前端架构也变得十分的重要. 如果一个大型项目没有合理的前端架构设计, 那么前端代码可能因为不同的开发人员随意的引入各种库和UI框架, 导致代码量变得异常臃肿, 最终结果可能是代码变得无法维护, 页面性能低下,不得已只能推…

如何用法向量求点到平面距离_支持向量机(SVM)

最近完成的一个项目用到了SVM&#xff0c;之前也一直有听说支持向量机&#xff0c;知道它是机器学习中一种非常厉害的算法。利用将近一个星期的时间学习了一下支持向量机&#xff0c;把原理推了一遍&#xff0c;感觉支持向量机确实挺厉害的&#xff0c;尤其是核函数变换可以把一…

TortoiseSVN 1.9.5安装 与 Eclipse4.4.2中安装SVN插件 图解详解

原文链接&#xff1a;http://blog.csdn.net/chenchunlin526/article/details/54631458 Eclipse svn 插件官网&#xff1a;http://subclipse.tigris.org/ Eclipse svn 插件更新网站&#xff1a;https://github.com/subclipse/subclipse/wiki -------------------------------…

虚拟服务器关机返回用户信息,在Linux服务器关机前向用户显示一条自定义消息...

在先前的文┞仿中&#xff0c;我们说清楚明了 Linux 中 shutdown、poweroff、halt、reboot 敕令的不合之处&#xff0c;并揭示了在用不合的选项履行这些敕令时它们实际做了什么。# shutdown 13:25本篇将会向你展示如安在体系关机时向所有的体系用户发送一条自定义的消息。建议浏…

eclipse svn不能忽略文件及文件夹,ignore设置无效 ?

SVN这块做得不好&#xff0c;如果之前提交过此文件&#xff0c;就不能设置忽略该文件了。所以第一次提交的时候要搞清楚再提交。 【 亲测&#xff0c;的确如此&#xff0c;用 Windows -> Preferences -> Team -> Ignored Resources 方法不行。 项目右键--team--设置…

华为服务器产品系列号查询,华为LIST全系列 服务器产品速查清单

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼型号 描述S5700-EI-AC-B09 S5700-52C-EI交换机(48个10/100/1000Base-T RJ45,2个10GE SFP上行口, 含堆叠卡)S5700-EI-AC-B06 S5700-28C-EI交换机(24个10/100/1000Base-T RJ45,2个10GE SFP上行口, 含堆叠卡)FC0M00S67403 S6748-EI交换…

BZOJ4300 绝世好题

目录 BZOJ4300 绝世好题题解&#xff43;&#xff4f;&#xff44;&#xff45;BZOJ4300 绝世好题 题目传送门 题解 比较简单的\(DP\)&#xff0c;记\(f[i]\)表示第\(i\)位为&#xff11;&#xff0c;最长的长度为多少。只需要枚举每一个数字&#xff0c;对于这个数字二进制下…

Sonatype Nexus 库被删除的恢复方法

原文连接&#xff1a;https://my.oschina.net/u/178116/blog/519840 --------------------有道云笔记保存---------------------------------------------- 今天在整理公司Maven私服的时候&#xff0c;不小心把Release库删掉了。瞬间冒出冷汗来了&#xff01;公司所有的积累都…

hbase 修改表名_hbase修改表名 - 张欢19933的个人空间 - OSCHINA - 中文开源技术交流社区...

hbase修改表名hbase修改表名没有直接的api可以调用&#xff0c;我们如果想要修改表名&#xff0c;可以利用快照的方式。需要开启快照功能&#xff0c;在hbase-site.xml文件中添加如下配置项&#xff1a;hbase.snapshot.enabledtrue命令hbase shell> disable tableNamehbase …

ajax一次输出1万条数据库,后端接口一次给出100万条数据,请问你前端怎么分页处理...

面试官既然能这么问&#xff0c;我们从技术的角度出发&#xff0c;探索一下这道题&#xff0c;上手操作了一下&#xff1a;function loadAll(response) {var html "";for (var i 0; i < 100000; i) {html "title:" 我正在测试[i] "";}$(…

“” '' ``区别 初学者自用

单引号 相当于吧里面的内容直接输出。并不会考虑里面是否有变量命令等双引号 "" 只认变量 命令会直接输出反引号 两种都认 实例&#xff1a; a"hello" [localhost.localdomain 10:16:09]$echo echo %a输出&#xff1a;echo %a [localhost.localdomain…

maven私有库配置

不同的项目&#xff0c;不同的私有库1、添加仓库Release 发布&#xff1b; 发行仓库snapshot 快照&#xff0c;开发&#xff0c;调试仓库配置完成2、配置权限默认开通的权限&#xff0c;查看权限给刚才建的两个私有库添加权限配置好后3、创建角色&#xff0c;分配权限添加rolei…

asc desc排序_21.数据库排序?左连接 ?右连接?

更多内容来源&#xff1a;http://mp.weixin.qq.com/mp/homepage?__bizMzA5OTQ1ODE1NQ&hid6&sn843337a7d9931839214ec8f861ac2164&scene18#wechat_redirect1、数据库排序语法 select column_name,column_name from table_name order by column_name,column_name as…

京东ajax怎么用,使用Ajax、json实现京东购物车结算界面的数据交互实例

全选商品单价数量小计操作全选删除选中产品总价&#xff1a;&#xffe5;0body,html,ul,li,a{margin:0;padding:0;font-family:"microsoft yahei";list-style:none;text-decoration:none;}.fl{float:left;}.fr{float:right;}.f12{font-size:12px;}.disl{display:inli…

Facebook 游戏开发更新文档 API 参考文档 v6.0

Facebook 游戏开发更新文档 API 参考文档 v6.0 更新日志 1.排行榜 此版本全新推出排行榜 API&#xff01;提供一套强大的 API&#xff0c; 使得游戏可获取排行榜、查询得分 情况和设置新分数&#xff08;支持分数所带的 任意元数据&#xff09;&#xff0c;并可向 Messenger 对…

maven私有库搭建

为什么要搭建maven私有库&#xff1f; 有位博主在2008年时这样写道&#xff1a; 如果没有私服&#xff0c;我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地&#xff0c;而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费…

mysql查询_MYSQL查询

-- 单表查询SELECT sc.*FROM scSELECT * FROM course-- 分页 LIMIT 从0开始检索SELECT * FROM course LIMIT 0,3SELECT * FROM course limit 3,3SELECT * FROM course LIMIT 6,1-- 多表连接查询-- 1.等值与非等值连接查询SELECT * FROM student;SELECT * FROM course;SELECT *…