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

原文地址:https://www.cnblogs.com/happyamyhope/p/7246617.html