在学习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到内存泄漏的地方就停下来。

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

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

  1. windows平台下使用Github(2 创建代码仓库,安装Github客户端.)

    本文会分章节的来介绍如何在windows平台下使用GitHub 一.注册Github账号 查看 二.创建代码仓库,安装Github客户端.查看 三.Github上传和下载(1 客户端方式)查看 四.G ...

  2. linux下使用命令行辅助定位内存泄漏问题

    文章目录 前言 一.free命令: 命令 内容解释 其它 二.top命令 命令 其它 三. cat /proc/$pid/status 命令 内容解释 总结 前言 最近自己正在做的一款产品,因内存泄漏 ...

  3. 理解并解决IE的内存泄漏方式[翻译2]

    大家节日快乐!俺就继续这个IE内存泄漏的主题来作为节日礼物了,并且相当欢迎大家来一起讨论.这一节讲Closures引起的内存泄漏,最后我还是决定把Closures翻译成了闭包或闭包函数.而且又在KB中 ...

  4. Release编译模式下,事件是否会引起内存泄漏问题初步研究

    题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...

  5. 内存泄漏的原因及解决办法_内存泄漏的场景和解决办法

    1.非静态内部类会持有外部类的引用,如果非静态内部类的实例是静态的,就会长期的维持着外部类的引用,组织被系统回收,解决办法是使用静态内部类 2.多线程相关的匿名内部类和非静态内部类 匿名内部类同样会持 ...

  6. 一次解决Linux内核内存泄漏实战全过程

    责编 | 张红月 来源 | Linux阅码场 2020 年转眼间白驹过隙般飞奔而去,在岁末年初的当口,笔者在回顾这一年程序员世界的大事件后,突然发觉如何避免程序员面向监狱编程是个特别值得一谈的话题. ...

  7. 海思linux内核 太大,一次解决Linux内核内存泄漏实战全过程

    责编 | 张红月 来源 | Linux阅码场 2020 年转眼间白驹过隙般飞奔而去,在岁末年初的当口,笔者在回顾这一年程序员世界的大事件后,突然发觉如何避免程序员面向监狱编程是个特别值得一谈的话题. ...

  8. 旅游市场火热,翔云人工智能平台助你快速解决发票问题

    随着疫情的退散,今年我国旅游市场也火热起来,大量旅客出行旅游,感受疫情结束后热气腾腾的生活.鉴于旅游行业的特殊性,接团旅游企业替旅游者支付的住宿费.餐费和旅游景点门票等,要以发票作为扣除营业税的依据. ...

  9. ubuntu下Qt Creator使用valgrind检测内存泄漏

    1.安装valgrind sudo apt-get install valgrind 2. Valgrind的使用 为了使valgrind发现的错误更精确,如能够定位到源代码行,建议在编译时加上-g参 ...

最新文章

  1. 论文其实也没有那么难!
  2. 研究生自学python好找工作么-学完Python好找工作吗?为什么有人学完找不到工作?...
  3. 在servlet中设置的字符编码集为什么还会出现乱码(亲测)
  4. c++调用python的代码、函数、类
  5. SnipperImages(Silverlight DEMO)控件设计之--Slider和ColorSlider
  6. 对VMware自动安装linux系统说“不”!
  7. HYSBZ - 2157树链剖分
  8. Windows核心编程_HOOk SOCKET实现封包拦截
  9. 运算符in和not in
  10. Atitit 项目文档规范化与必备文档与推荐文档列表
  11. html字体样式圆体,网红字体“柚圆体”出现,书写工整又清新,老师也被这种字体圈粉...
  12. 怀集天气预报软件测试,【天气】怀集要入夏?这份天气预报告诉你答案!
  13. 什么叫大数据人物画像_【说大数据】人物画像 :大数据时代的心灵捕手
  14. SCCM通过PXE部署系统蓝屏Recovery
  15. 《Slice-to-volume medical image registration: A survey》论文阅读
  16. java.sql.SQLException: Access denied for user ‘Xs‘@‘localhost‘ (using password: YES) 出现的原因和解决办法
  17. 后浪青年的聊天,需要Python助威!
  18. opengl纹理颠倒,rgb通道错位等。详解rgba,bgra,argb等内存序
  19. js实现桌面录屏功能
  20. win7旗舰版6l打印机咋安驱动_w7怎样安装打印机驱动_win7安装打印机驱动教程

热门文章

  1. h5获取http请求头_nodejs 中http请求头,响应头
  2. C/C++队列与循环队列
  3. linux中央服务器,如何在Linux上搭建一个Git中央仓库
  4. 潍坊经贸每年单招计算机的成绩,2018潍坊职业学院单招成绩查询时间
  5. 心理学博士vs计算机博士,零基础跨专业考心理学博士,可以给我一些建议吗?...
  6. java趣味_Java趣味分享:try finally
  7. 吃下去的东西老是往上翻上来_食管裂孔疝的这个诱因你知道吗?医生:不要再吃过烫的食物...
  8. 合肥天鹅湖万达广场机器人_合肥租房价位及租房地理位置推荐
  9. opencv 高通滤波和低通滤波_滤波电路合集(低通滤波,CLCП滤波,DLC滤波,CRC П滤波)...
  10. 如何查询高考成绩2021年的成绩排位,2020年高考成绩排名怎么查,高考成绩排名是怎么排的...