C++使用opencv产生line:1322 _CrtlsValidHeapPointer(pUserData) 异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012839256/article/details/80343589

line:1322  _CrtlsValidHeapPointer(pUserData) 

异常解决方案

直接运行产生下图异常:

既然产生了异常,那就赶紧解决吧,于是开始调试,结果调到最后没发现啥异常,又弹出这个鬼,说是堆损坏,我的个乖乖。。。



解决方案:!!!

经过两天的搜寻和探索,终于找到了解决方案,一起往下看。

首先我们一直使用的是共享DLL库,也就是动态库,当然我不是说动态库就是产生这个异常的原因,可能是能力有限没有找到动态库下的解决方案。

作者在这里要使用静态库来解决上述异常,步骤如下:

1  由于网上大部分opencv配置都是使用的动态库,因此我们的opencv需要重新配置为静态库。在这里我们使用vs2010配置opencv2.4.9的静态库

(1)在【视图】-【属性管理器】-【Debug】下新建一个 【属性表】

(2)在【VC++目录】-【包含目录】中添加 E:\OpenCV2.4.9\opencv\build\include;

E:\OpenCV2.4.9\opencv\build\include\opencv ;  E:\OpenCV2.4.9\opencv\build\include\opencv2;

【库目录】添加  E:\OpenCV2.4.9\opencv\build\x86\vc10\staticlib

(3)【链接器】-【输入】-【附加依赖项】添加:

vfw32.lib
comctl32.lib
IlmImfd.lib
libjasperd.lib
libjpegd.lib
libpngd.lib
libtiffd.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_ml249d.lib
opencv_nonfree249d.lib
opencv_objdetect249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_videostab249d.lib

zlibd.lib

(4)在【C/C++】-【代码生成】中,修改【运行库】为   多线程调试(/MTD)

(5)由于MFC运行库必须与opencv属性表处于相同类型才能兼容(同为动态/静态)。

在【视图】-【解决方案资源管理器】中,右击解决方案名称,选择【属性】-【配置属性】-【常规】,选择  MFC使用    为    在静态库中使用MFC

至此,程序成功执行,且不在产生上述错误。

注:如果之前使用别的配置opencv配置属性集,然后再中途更换本属性集,是不能成功执行的,因为之前已经Debug过,产生了解决方案,数据集已经使用,因此要想更换数据集,必须找到解决方案文件夹下的Debug文件夹,将其中的Debug之后保存的运行程序全部清空(即将Debug文件夹清空,该Debug文件夹并非解决方案配置的Debug,注意不要误删)


猜你喜欢

转载自blog.csdn.net/u012839256/article/details/80343589
今日推荐