轉載http://blog.csdn.net/u012327581/article/details/51351780
1.問題描述
在VS2015下配置好Opencv后,程序在函數運行過程中正常,調試時發現,當運行至跳出函數時,出現斷言錯誤。
2.原因分析
單步跟蹤調試發現,在函數結束時會進行vector的析構,出現了析構錯誤。並且,如果vector在定義完成之后,進行resize或reserve操作,將vector空間做大,問題消失。后來查閱資料,結合親身測試,發現是在調用Opencv 庫時,由於opencv庫編譯使用的是 VC12(或者VC10/VC11)編譯的,而本人使用的VS2015使用的時VC14(14是內部編碼),不同版本的編譯器造成析構方法沖突。
3.解決方法
使用VC12版本的庫,需要使用VC12的編譯器即可,如VS2012、VS2013
使用VC14編譯器時,截至目前,Opencv官網的2.4.*系列版本的庫只有VC10/VC11/VC12編譯的版本,只有OpenCV3.0之后的版本含有VC14編譯的版本。因而本人又重新將opencv使用VS2015進行編譯,設置好參數后,問題解決。
卸載vs2015,裝上VS2012之后,運行某些vector不會報錯了,但是並非所有的vector都能正常運行(這個真的很坑人),重新出現的斷言錯誤如下
此處省略,詳情查看下面的鏈接……
詳細鏈接 http://blog.csdn.net/jianjian1992/article/details/49247003
上面的3樓,針對部分vector有用(占空間不那么大的程序),如果是針對視頻的處理,最終還是會失敗(治標不治本)。
使用1樓的方法,將依賴庫進行修改(改成沒有d的情況,末尾有d是debug模式,沒有d才是release模式)
改成release模式后雖然能用,但始終沒有明白原因,o(╯□╰)o