[VS+OpenCV] 程序运行过程正常,当跳出函数是出现断言错误

问题描述

在VS2015下配置好Opencv后,成勋在函数运行过程中正常,调试时发现,当运行至跳出函数是,出现断言错误。如图

原因分析

单步跟踪调试发现,在函数结束时会进行vector的析构,出现了析构错误。并且,如果vector在定义完成之后,进行resize或reserve操作,将vector空间做大,问题消失。后来查阅资料,结合亲身测试,发现是在调用Opencv 库时,由于opencv库编译使用的是 VC12(或者VC10/VC11)编译的,而本人使用的VS2015使用的时VC14(14是内部编码),不同版本的编译器造成析构方法冲突。

解决方法

  1. 使用VC12版本的库,需要使用VC12的编译器即可,如VS2012、VS2013
  2. 使用VC14编译器时,截至目前,Opencv官网的2.4.*系列版本的库只有VC10/VC11/VC12编译的版本,只有OpenCV3.0之后的版本含有VC14编译的版本。因而本人又重新将opencv使用VS2015进行编译,设置好参数后,问题解决。

注:

Opencv编译方法可参考:
1. [【opencv】VS2010+CMake重编译opencv2.4.10](http://blog.csdn.net/hujingshuang/article/details/47071391)
2. [win10 + VS2010 + OpenCV2.4.10重编译OpenCV开发环境搭建](http://blog.csdn.net/denyz/article/details/46418147)
3. [Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV](http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html)
4. [编译opencv](http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html%20%E7%BC%96%E8%AF%91OpenCV)

你可能感兴趣的:(vs,opencv)