版权声明:本文为博主原创文章,未经博主允许不得转载,博客地址:http://blog.csdn.net/mars_xiaolei。 https://blog.csdn.net/mars_xiaolei/article/details/86014836
问题描述
新建一个MFC应用程序,导入OpenCV,只要使用了OpenCV里面的东西(假设定义了一个Mat变量),当程序在运行时,不会有任何反应,但是当点击应用程序右上角的叉叉关闭程序时,那么问题就来了,输出窗口会出现一大堆内存泄漏问题,这是假内存泄漏,如下图所示:
Detected memory leaks!
Dumping objects ->
{680} normal block at 0x01147EB0, 56 bytes long.
Data: <@ > 40 04 E9 0F 00 00 00 00 00 00 00 00 CD CD CD CD
{679} normal block at 0x01147AE8, 908 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 80 02 00 00
{356} normal block at 0x0114E170, 87 bytes long.
Data: < p > CD CD CD CD CD CD CD CD CD CD CD CD 70 E1 14 01
{355} normal block at 0x0114E0E0, 83 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD E0 E0 14 01
{353} normal block at 0x0114DD00, 72 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD 00 DD 14 01
{352} normal block at 0x0114DC90, 48 bytes long.
Data: <GeneralizedHough> 47 65 6E 65 72 61 6C 69 7A 65 64 48 6F 75 67 68
解决方法
1、找到当前项目的解决方案资源管理器,选择项目名称,点击鼠标右键,选择最底下的属性选项。
2、点击属性选项之后,进入属性页面,依次找到配置属性、链接器、输入、延迟加载的DLL选项,然后去把OpenCV的bin文件下的所有dll的名称添加到延迟加载的DLL中,添加完之后,点击确定,然后再运行一下程序,基本上就没有内存泄漏出现了。
3、我把所有dll贴上来,用的是OpenCV2410的,有需要的自己改下
opencv_contrib2410.dll
opencv_core2410.dll
opencv_features2d2410.dll
opencv_flann2410.dll
opencv_gpu2410.dll
opencv_highgui2410.dll
opencv_imgproc2410.dll
opencv_legacy2410.dll
opencv_ml2410.dll
opencv_nonfree2410.dll
opencv_objdetect2410.dll
opencv_ocl2410.dll
opencv_photo2410.dll
opencv_stitching2410.dll
opencv_superres2410.dll
opencv_ts2410.dll
opencv_video2410.dll
opencv_videostab2410.dll
opencv_contrib2410d.dll
opencv_core2410d.dll
opencv_features2d2410d.dll
opencv_flann2410d.dll
opencv_gpu2410d.dll
opencv_highgui2410d.dll
opencv_imgproc2410d.dll
opencv_legacy2410d.dll
opencv_ml2410d.dll
opencv_nonfree2410d.dll
opencv_objdetect2410d.dll
opencv_ocl2410d.dll
opencv_photo2410d.dll
opencv_stitching2410d.dll
opencv_superres2410d.dll
opencv_ts2410d.dll
opencv_video2410d.dll
opencv_videostab2410d.dll