R6010 -abort() has been called錯誤分析及其解決方法


前言

  調試代碼的過程中經常會遇到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM