前言
調試代碼的過程中經常會遇到R6010 -abort() has been called的錯誤,在此,分析一下該問題.
錯誤的表現形式:
導致出現這樣的原因有:
1.非法指針訪問和內存泄漏;
2.大家再查查吧,一定是指針出現問題了。設置的指針范圍跟你運行的不對;
3.指針訪問內存越界出現問題;
4.是因為不支持中文;
5.內存不夠分配;
6.當時后來檢查發現的問題應該是多線程訪問資源出的問題;
7.檢查一下exe和dll是否混用的不同版本的crt;
解決方法:
第一:檢查申請的空間沒有釋放;
第二:檢查堆棧空間是否已經被全部分配滿,建議每次內存分配盡量不要太大,並且記得釋放;
第三:指針指向了不可預期的內存位置;
針對我的問題,
發現在以下代碼處出現錯誤:
features(temp, feature);
而這個函數的聲明是:
extern void features(const Mat& image, Mat& features);
原因:
程序中已經聲明定義了全局變量image,且有一小段運行過程中對image變量使用了互斥鎖,多個線程會用到image變量,而出現問題的features函數中多次使用到image這個變量,所以出錯;
解決方法:
將features函數中使用到image變量的地方,使用其他的變量名稱即可;
還有一個原因是,
代碼中的變量數據有問題,比如,函數輸入應為彩色RGB圖像,但是之前使用的灰度圖像,忘記將灰度化部分去除,因此出現錯誤。
參考
1.http://www.2cto.com/kf/201503/382523.html
完