1. 程式人生 > >[VS+OpenCV] 程式執行過程正常,當跳出函式是出現斷言錯誤

[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)