最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取、保存图像外的操作都自己写,没想到直接封装OpenCV的读取、保存功能的第一步就出错。关键代码如下

void MyImage::Clear()
{
if (m_pImg != nullptr)
{
std::cout << "释放内存" << std::endl;
delete m_pImg;
m_pImg = nullptr;
}
}

其中m_pImg是IplImage*类型,析构函数调用Clear函数。在主函数里用窗口显示图像,关闭后就成了这样子了

打开图像时没问题,关闭显示窗口后就出现错误。

Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

是典型的内存泄露的表现。

原来是OpenCV中对于IplImage的内存释放是严格要用cvReleaseImage函数的,毕竟delete对应的是new,而IplImage*不是用new来申请内存,而是用cvCreateImage或cvLoadImage这种封装了申请内存的方法。所以不能习惯性地对指针用delete,把那段改成cvReleaseImage(&m_pImg);即可

最新文章

  1. tiny6410在I2c用户态中的程序设计eeprom
  2. centos 安装 mysql5.7.9初始密码问题
  3. html5 svg
  4. 什么是 Unix 以及它为什么这么重要?
  5. 转:SQL Server 批量插入数据的两种方法
  6. Android强制设置横屏或竖屏
  7. Struts工作流程
  8. E - Just a Hook - hdu 1698(区间覆盖)
  9. Config配置文件读写
  10. java IoC
  11. std::shared_ptr&lt;void&gt;的工作原理
  12. notify丢失、虚假唤醒
  13. Git 配置用户名、密码
  14. mysql 状态锁 连接数
  15. 05-树8 File Transfer (25 分)
  16. Vue实例:演示input 和 textarea 元素中使用 v-model 实现双向数据绑定
  17. java学习之路--继承(多态的动态绑定)
  18. windows下怎么生成github的ssh公钥
  19. Oracle sqlldr导入之“MAXIMUM ERROR COUNT EXCEEDED”
  20. java 解析txt/html文件

热门文章

  1. 对一致性Hash算法,Java代码实现的深入研究(转)
  2. lambda表达式 &lt;二&gt;
  3. java中+=详解 a+=b和a=a+b的区别
  4. GridView 控制默认分页页码间距 及字体大小
  5. MPAndroidChart Wiki(译文)~Part 5
  6. css 添加伪元素 消除浮动 对父元素高度产生的影响
  7. 移动端 css 禁止长按屏幕选中
  8. oracle 查询XML操作、操作系统文件
  9. 【Python爬虫学习笔记(1)】urllib2库相关知识点总结
  10. 表单验证——jquery validate使用说明