前言
调试代码的过程中经常会遇到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
完