OpenCV 的内存泄露问题(静态内存泄露)
2015-12-09 16:58
309 查看
场景:
一个MFC工程中, 使用了一个OpenCV的函数(cvReleaseImage)(随便一个都是). 然后我编译, Debug运行, 退出. 然后就在Output就出现内存泄露的输出.{134} normal block at 0x00335620, 29 bytes long. Data: < 0V3 7V3 > 00 00 00 00 30 56 33 00 37 56 33 00 00 00 00 00 {133} normal block at 0x003355A8, 57 bytes long. Data: < ( 0U3 > 00 00 00 00 28 00 00 00 00 00 00 00 30 55 33 00 {132} normal block at 0x00335530, 54 bytes long. Data: < ( U3 T3 > 00 00 00 00 28 00 00 00 A8 55 33 00 B8 54 33 00 {131} normal block at 0x003354B8, 53 bytes long. Data: < ( 0U3 8T3 > 00 00 00 00 28 00 00 00 30 55 33 00 38 54 33 00 ......
说明:
1. new了忘记delete这么白痴的错误, 在这个工程中没有, 因为这个工程什么代码都没有添加, 只添加了cvReleaseImage(xxx)语句, 而且程序运行过程中并没有运行执行到cvReleaseImage.(就是说我只是随便添加一个调用而已.)
2. 如果把cvReleaseImage调用注释掉, 就不会出现内存泄露输出.
分析:
1. 那很明显了, 就是连接了OpenCV的库之后就会产生这个内存泄露输出.2. 创建了一个控制台工程, 使用OpenCV的库. 就没有出现这种情况.
3. 谷歌了一下, 发现也有人遇到这样的现象.
4. http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV
(这篇文章有这么一句话: "同时最好选择“use MFC As a static library”(防止MFC中使用OpenCV的内存泄露问题)")
5. 解决方法: 在MFC工程中, 选择"Use MFC in a Static Library". 问题解决.
6. 选择"Use MFC in a Static Library"又产生了新的问题, 就是各种连接错误.
最终解决方法:
1. MFC工程还是使用默认的Use MFC in a Shared DLL.2. 把OpenCV编译成静态库. 我们自己工程中使用OpenCV的静态库.
http://blog.csdn.net/bagboy_taobao_com/article/details/8718745
3. 这样可以解决问题.
小结:
1. 在控制台工程中没有这个现象, 但是在MFC工程中就有, 非要选择"Use MFC in a Static Library".2. 这样的问题, 不知是MFC扯蛋还是OpenCV扯蛋! 难道是我扯蛋?
相关文章推荐
- c语言内存泄露示例解析
- IE下使用jQuery重置iframe地址时内存泄露问题解决办法
- Android App调试内存泄露之Cursor篇
- js内存泄露的几种情况详细探讨
- Javascript 闭包引起的IE内存泄露分析
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- 深入解析PHP垃圾回收机制对内存泄露的处理
- PHP脚本内存泄露导致Apache频繁宕机解决方法
- 容易造成JavaScript内存泄露几个方面
- 关于js内存泄露的一个好例子
- 总结JavaScript在IE9之前版本中内存泄露问题
- Android编程中避免内存泄露的方法总结
- C语言中的内存泄露 怎样避免与检测
- 基于C++实现kinect+opencv 获取深度及彩色数据
- OpenCV 2.4.3 C++ 平滑处理分析
- PHP CURL 内存泄露问题解决方法
- Java中典型的内存泄露问题和解决方法
- Android中Handler引起的内存泄露问题解决办法