OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 5207|回复: 9

请教MFC 使用 Mat 内存泄漏问题。

[复制链接]
发表于 2017-4-27 11:34:24 | 显示全部楼层 |阅读模式
本帖最后由 jetluo 于 2017-4-27 14:28 编辑

在MFC开发过程中使用opencv ,只要引入Mat,就会出现内存泄漏。
测试程序很简单,基于dialog的程序。在OnBnClickedOk()中引入Mat,关闭窗口,即出现内存泄漏。d:1.jpg
(发不了图?)


void CTestOpenCVMemLeakDlg::OnBnClickedOk()
{
//        cv::Mat mat1;

        CDialogEx::OnOK();
}


回复

使用道具 举报

发表于 2017-4-27 21:36:11 | 显示全部楼层
你具体的内存泄漏,体现在什么地方?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-28 09:25:28 | 显示全部楼层
本帖最后由 jetluo 于 2017-4-28 09:27 编辑

发不了图。
如果加入cv::Mat mat1; 退出时,VS输出窗口出现:
Detected memory leaks!
Dumping objects ->
{152} normal block at 0x007CF698, 30 bytes long.
Data: <      |   |     > 00 00 00 00 A8 F6 7C 00 AF F6 7C 00 00 00 00 00
{151} normal block at 0x007CF608, 77 bytes long.
Data: <      |     (   > CD CD CD CD 08 F6 7C 00 00 00 00 00 28 00 00 00
{150} normal block at 0x007CF580, 74 bytes long.
Data: <              | > CD CD CD CD CD CD CD CD CD CD CD CD 80 F5 7C 00
{149} normal block at 0x007CF4F8, 73 bytes long.
Data: <      |     (   > CD CD CD CD F8 F4 7C 00 00 00 00 00 28 00 00 00
{148} normal block at 0x007CF468, 81 bytes long.
Data: <    h |     (   > CD CD CD CD 68 F4 7C 00 00 00 00 00 28 00 00 00
{147} normal block at 0x007CF3E0, 73 bytes long.
Data: <              | > CD CD CD CD CD CD CD CD CD CD CD CD E0 F3 7C 00
{146} normal block at 0x007CF350, 81 bytes long.
Data: <            P | > CD CD CD CD CD CD CD CD CD CD CD CD 50 F3 7C 00
{145} normal block at 0x007CEE58, 76 bytes long.
Data: <    X |     (   > CD CD CD CD 58 EE 7C 00 00 00 00 00 28 00 00 00
Object dump complete.
程序“[2748] TestOpenCVMemLeak.exe”已退出,返回值为 0 (0x0)。
有内存泄漏。

如果去掉cv::Mat mat1;
则:
线程 0xf8c 已退出,返回值为 0 (0x0)。
程序“[6168] TestOpenCVMemLeak.exe”已退出,返回值为 0 (0x0)。

没有内存泄漏。
回复 支持 反对

使用道具 举报

发表于 2017-5-3 22:27:56 | 显示全部楼层
这个问题大概10年前就在论坛里面讨论过,我那时还用MFC,你可以搜索一下我的帖子。问题的主要原因是OpenCV里面存在一些静态变量的初始化的过程和MFC的有冲突,当时我还跑到微软公司MFC的邮件组里面去聊,一帮大牛给了一些意见和结果,你也可以搜索一下。
回复 支持 反对

使用道具 举报

发表于 2017-5-3 22:58:21 | 显示全部楼层
ollydbg23 发表于 2017-5-3 22:27
这个问题大概10年前就在论坛里面讨论过,我那时还用MFC,你可以搜索一下我的帖子。问题的主要原因是OpenCV ...

我最近在AnswerOpenCV上也看到有人问这个问题,但是我不是很理解。因为我一直沿用shiqiyu的CVVIMAGE的方法,目前没有出现冲突的情况。
回复 支持 反对

使用道具 举报

发表于 2019-10-19 09:54:04 | 显示全部楼层
楼主,这个问题你怎么解决呀,我也遇到这个问题了
回复 支持 反对

使用道具 举报

发表于 2019-10-31 20:38:13 | 显示全部楼层
你可以不要在事件驱动里面声明Mat呀。
实际上如果使用QT写的话,这种写法直接编译都不通过。
回复 支持 反对

使用道具 举报

发表于 2019-11-8 12:16:36 | 显示全部楼层
我给大家找到了大概十几年前在MFC的新闻组里面我的提问,以及几个MFC大牛的回复。都是关于OpenCV内存泄漏问题的内容。

https://groups.google.com/d/topi ... GENar9R4/discussion

有兴趣大家自己去看。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-7 02:48 , Processed in 0.009353 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表