OpenCV广泛问题,cv::findContours()函数使用时导致的程序崩溃问题的解决方案

我使用的是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


上一篇:[转] WinForm自定义函数FindControl实现按名称查找控件


下一篇:如何从 SAP Fiori Elements List Report Table 点击事件响应函数里拿到表格某一行的信息