opencv + mfc 引起的内存泄漏

之前一直用win32写opencv 的程序,没有任何内存泄漏,然后改需求,要求用把这个win32的exe做成dll,瞬间麻烦大了,各种内存泄漏,从网上查了一下,大体上是opencv 和mfc的机制不同,导致opencv的内存泄漏,网上给了两种解决方案

1、将mfc改成静态库使用   (程序里面引用opencv的dll,验证没有任何内存泄漏,就算你动态创建了各种指针不释放,最后也不会出现内存泄漏,难道是opencv自己给释放的?)

2、延迟加载dll   (我借用opencv的功能,自己写了个程序,封装成dll,然后延迟加载这个dll后,程序没有内存泄漏了,如果还有内存泄漏,肯定是你程序没有释放各种指针变量)

这两种方法都试过了,都能解决内存泄漏,根据不同的程序,选择不同的解决方式,不过不是很建议用第一种,毕竟搞c++,要掌握好内存的控制和释放,别写不干净的代码

时间: 2024-08-29 18:20:47

opencv + mfc 引起的内存泄漏的相关文章

MFC多线程内存泄漏问题&解决方法

在用visual studio进行界面编程时(如MFC),前台UI我们能够通过MFC的消息循环机制实现.而对于后台的数据处理.我们可能会用到多线程来处理. 那么对于大多数人(尤其是我这样的菜鸟),一个比較快捷的方法便是选择MFC多线程:AfxBeginThread或者CreateThread来进建立多线程.当一两个线程还是能够得.当有3个或者3个以上的线程出现时,极可能出现内存泄漏.原因分析例如以下: CWinThread的多线程不安全性: 由于 CWinThread 会调用_beginthre

MFC多线程内存泄漏问题&解决方法

在用visual studio进行界面编程时(如MFC),前台UI我们可以通过MFC的消息循环机制实现.而对于后台的数据处理,我们可能会用到多线程来处理.那么对于大多数人(尤其是我这种菜鸟),一个比较快捷的方法便是选择MFC多线程:AfxBeginThread或者CreateThread来进建立多线程.当一两个线程还是可以得,当有3个或者3个以上的线程出现时,极可能出现内存泄漏.原因分析如下: CWinThread的多线程不安全性: 因为 CWinThread 会调用_beginthreadex

别再用apt提供的OpenCV了:ubuntu16.04下,有内存泄漏

ubuntu16.04系统下,用apt装的opencv,存在内存泄漏.自己写的程序用到了opencv,为了避免误解自己的代码有没释放的内存,建议换用新版本,例如opencv3.4.5(自行编译). sudo apt install libopencv-dev安装的opencv 调用OpenCV的C接口,最基本的函数CvShowImage() 利用valgrind检查内存泄漏情况 测试代码如下: //main.c #include "opencv2/imgproc/imgproc_c.h"

MFC 关于new出一个新对话框时,退出对话框内存泄漏的问题解决

问题: 在进行点击按钮弹出对话框时,我是用了new来生成一个新的对话框,但是在新对话框关闭的时候,经过检查发现,新对话框存在内存泄漏问题. 原因: 因为使用了new,但是当时没有找到地方进行delete,所以出现了delete. 解决: 在Oncancle()函数上添加:   DestroyWindow(); delete this; 就可以解决这个问题,之前只在Oncancle()函数中加入了delete()函数,导致还是存在内存泄漏的提示,经过查资料,不光要delete,还要在delete前

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

最快速度找到内存泄漏

确认是否存在内存泄漏 我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏.例如: class CMyApp : public CWinApp{public:   BOOL InitApplication()   {       int* leak = new int[10];       return TRUE;   }}; 产生的内存泄漏报告大体如下: Detected memory leaks!Dumping objects ->c:worktest.cpp(

一个跨平台的 C++ 内存泄漏检测器

2004 年 3 月 01 日 内存泄漏对于C/C++程序员来说也可以算作是个永恒的话题了吧.在Windows下,MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏.在Linux下,相对来说就没有那么容易使用的解决方案了:像mpatrol之类的现有工具,易用性.附加开销和性能都不是很理想.本文实现一个极易于使用.跨平台的C++内存泄漏检测器.并对相关的技术问题作一下探讨. 基本使用 对于下面这样的一个简单程序test.cpp: int main() { int* p1 = ne

(转)最快速度找到内存泄漏

最快速度找到内存泄漏 许式伟 2006年11月某日 内存管理是C++程序员的痛.我的<内存管理变革>系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担.由于工作忙的缘故,这个系列目前未完,暂停. 这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏. 1.确认是否存在内存泄漏 我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏.例如: class CMyApp : public CWinApp { public: BO

VS2005 检测内存泄漏的方法(转载)

一.非MFC程序可以用以下方法检测内存泄露: 1.程序开始包含如下定义: [cpp] view plain copy print? #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) #else #define DEBUG_CLIENTBLOCK #endif  // _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #includ