MFC中使用FindContours()函数使用时导致的程序崩溃问题的解决方案
2018-01-07 21:56
351 查看
遇见这个问题头疼了半天,尝试了N中方案,然后把网上所提供的方案整理下,看看哪一种合适你的错误。
方案一:
如果使用
vector<vector<Point> > contours;作为findContours的参数,在运行时会得到
Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & f…
原因是标准库里有std::vector 和 Point 和findContours里要用到的vector和Point不是一回事所以,声明的时候要用cv::vector和cv::Point就可以了。
方案二:
“修改了当前程序的vc运行库配置,问题解决。具体方法是:项目-属性-配置属性-C/C++-代码生成-运行库,将其改为“多线程调试(/MTd)”。”
方案三:
在配置属性->常规->MFC的使用中,将在静态库中使用MFC改为在共享DLL中使用MFC。
方案四:
为vector初始化:
vector<Mat> contours(100); Mat hierarchy; findContours( BW, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE );1
2
3[/code]
方案五:
当一个DLL采用静态的方式链接到C运行时库时,会创建一个相对于该DLL的堆(Heap),而如果采用共享的方式链接到C运行时库的时候则使用的是应用程序的堆内存。而_CrtIsValidHeapPointer()在 DEBug模式下将确保传入的地址在本地的堆内存中。 因此就有理由相信,真有可能是静态链接的问题。所以,我立即尝试将:
项目–属性–配置属性–常规–MFC的使用– 选择在共享DLL中使用MFC ;同时,
项目–属性–配置属性–C/C++–代码生成–运行库–选择 多线程DLL(/MD)。
方案六:
方案七:
方案八:
错误提示为:_pFirstBlock==pHead。
解决方法
此问题的产生多半是因为在调用库的过程中产生了冲突,所以解决此问题的方法就是将OpenCV的调用方法改为静态调用, 使用OpenCV的静态库
opencv中在静态库中使用MFC的配置方法如下:
D:/Program Files/opencv/build/x86/vc12/staticlib1、lib选择staticlib;
也就是VC++目录中的包含目录应该为如下路径
2、属性页---配置属性----MFC的使用---在静态库下使用MFC;
这样会将你程序用到的一些库写到你的exe文件中,换来的是可移植性,但是exe文件会稍微大一些
3、属性----C/C++ -----代码生成----运行库选择位多线程调试(/MTd)。
在静态库下也可能会出现异常错误:这时候考虑的问题有如下2个:
1、确实是你程序错误,如果程序错误最有可能是你new的指针没有delete,或者某个内存没有分配就开始用再或者就是野指针等情况,最好单步调试,注意指针和数组。
2、opencv的配置错误
配置好opencv后发现我的程序在共享DLL下使用MFC是没有错误,但是一旦选择了静态库下使用MFC就出现了上面的错误。如果不是程序问题,那么通常,Debug下面可能引用了Release下面静态编译的库。如果在debug环境下运行,只要将release下面的库全部删除就可以了。
相关文章推荐
- FindContours()函数使用时导致的程序崩溃问题的解决方案
- MFC项目使用webbrowser控件,点击载入的页面里的文件下载链接后导致程序的崩溃问题的解决方案
- findContours导致MFC程序崩溃的问题
- 记32位程序(使用3gb用户虚拟内存)使用D3DX9导致的一个崩溃的问题
- MFC中GDI超过9999导致程序崩溃问题的解决
- 规避QT4.8.5版本下ocx(dll的情况下)使用QNetworkAccessManager导致程序退出时产生的崩溃问题
- linux 使用不安全的sprintf函数,存储字符越界导致程序莫名崩溃问题
- vc2010使用CMFCEditBrowseCtrl控件导致程序退出崩溃解决
- 经常遇到的一个问题是 MFC中开启多线程后 在非主线程中使用updata函数出现崩溃的情况。
- OpenCV findContours导致程序崩溃和相关使用问题
- 回调函数参数不同,导致程序崩溃.
- 关于win32程序如何使用mfcdll的问题.
- 使用coredata导致的版本更新后程序crash的问题
- 在Win XP及Win 2003下使用程序方式(C#)设置共享文件夹的文件夹权限的问题及解决方案
- windows 7 如何关闭 程序崩溃时弹出的"windows正在检查该问题的解决方案"
- 使用const_cast转换全局const变量导致程序崩溃的原因
- PHP中使用foreach和引用导致程序BUG的问题介绍
- WriteFile导致程序崩溃的问题
- 使用NSKeyedArchiver保存数据导致程序退出问题
- PostQuitMessage(0)要慎用,经常会造成MFC程序退出时内存泄露,还是尽量使用MFC基类的退出函数比较好。