在vs2010下使用opencv,release出错。求大神啊This may be due to a corruption of the heap

zgzw_2 2012-08-28 03:21:30
使用opencv进行图像、矩阵的处理。
CvMat *reult;
IplImage * img;
....

.....
//处理操作进行完之后
cvReleaseMat( &result );
cvReleaseImage(&img);

出现错误:

Windows has triggered a breakpoint in MDIDocvw.exe.

This may be due to a corruption of the heap, which indicates a bug in MDIDocvw.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while MDIDocvw.exe has focus.

The output window may have more diagnostic information.


查一下有人说是因为之前使用了new/malloc破坏了内存,后来又使用了这段被破坏的内存导致?

请问:
原因是这样的吗?要怎样才能解决呢?
求大神
求大神
...全文
472 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgzw_2 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

楼主碰到了传说中的踩内存了。

这种东西最好的解决方法就是断点崩溃,CallStack然后反找。

不难处理吧
[/Quote]嗯,多谢啦
傻X 2012-08-28
  • 打赏
  • 举报
回复
楼主碰到了传说中的踩内存了。

这种东西最好的解决方法就是断点崩溃,CallStack然后反找。

不难处理吧
微型蚂蚁 2012-08-28
  • 打赏
  • 举报
回复
是的,主要检查对象的生成和销毁顺序,尤其是这种情况
B依赖A
B在析构的时候会调用到A进行一定的操作
而在程序结束的时候先调用了A的析构函数而后B才析构。

你可以在调试模式下发生错误是点break,找到产生这一问题的地方进一步分析(不一定准确)。
另外在进行销毁的顺序最好和定义的顺序相反。定义时被依赖的在前。
所以你最好
cvReleaseImage(&img);
cvReleaseMat( &result );

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧