我使用的是OpenCV 2.4.13.6版本。
折腾半天,最后把dll库项目的属性,C/C++,代码生成,运行库:多线程调试(/MTd)改为多线程DLL调试(/MDd)就好了。
即:
在UI项目,配置属性->常规->MFC的使用中,选择共享DLL中使用MFC;
在算法dll库项目,Debug,配置属性->C/C++->代码生成->运行库中,选择多线程DLL调试(/MDd)。
大概原因:
通过对出现的错误:__acrt_first_block == header可以大致的知道是堆内存出现的问题,堆区一般都是用来申请分配动态数组时才会使用,而申请动态数组用的最多的就是使用关键字new[]进行申请分配。而我在程序中并未使用new,哪来的堆区的使用呢,通过查找资料了解到vector可以动态分配内存,因此问题极可能就出现在这上面。
--------------------------------------------------------end------------------------------------------------------
网上也有很多文章说手动分配内存,办法我也试过,在我这没效果。
vector<Vec4i>hierarchy(10000);
vector<Mat>contours(10000);//手动分配内存空间大小
findContours(Dst, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
//注意,内存空间不已设置过大,否则也会导致程序崩溃.**
---
参考文献
https://blog.csdn.net/auto1993/article/details/52694521
https://bbs.csdn.net/topics/391015107