您的位置:首页 > 编程语言 > C语言/C++

0x00007FF7C49A4C42 处有未经处理的异常:0xC0000005: 读取位置 0x000001481A2D86C4 时发生访问冲突

2017-08-09 09:57 597 查看
这个问题我最近遇到过几次,主要是在做特征点检测,或者有用到有数组或者向量的情况下,有可能会出现这种情况,可能出现这种问题的情况有很多,我现在说一下我发现的问题:

这几次出现这种问题基本都是溢出问题,比如一个向量他的大小为500,而你在访问的时候却访问了他的第501个元素,就会出现这种问题,但是这种问题比较难发现,因为程序写的没有问题,但是就是会蹦出来这种问题呀,我当时是一个一个去试,由于程序比较大,我会重新建立一个工程,然后把这个程序简化掉,然后再去找问题。下面我来举个栗子:

vector<Vec4i> m1,m2;//创建两个向量
m1.push_back(Vec4i(1, 2, 3, 4));//往向量里面加入数据
m1.push_back(Vec4i(3, 5, 8, 7));
m1.push_back(Vec4i(2, 8, 9, 7));

m2.push_back(Vec4i(1, 9, 6, 17));//同理
m2.push_back(Vec4i(37,45,126,32));
m2.push_back(Vec4i(4,5,96,21));

vector<double>distance;//同理
distance.push_back(2.236);
distance.push_back(1.732);
distance.push_back(2);
distance.push_back(0.2358);
distance.push_back(0.001);

std::vector<double>::iterator minest = min_element(begin(distance),end(distance));
int position = std::distance(std::begin(distance), minest);//找出distance向量中最小的元素所在的位置
int nnn = m1[0][3] - m2[position][3];


最开始的时候出现这个问题是下面这句代码:

int nnn = m1[0][3] - m2[position][3];


我写了个很简单的例子,distance向量中最小的元素的位置是4,在这句代码中,我们访问m2向量时m2[position][3],也就是访问m2[4][3],但是实际上m2是没有第四行的,这个时候就会造成访问越界,就会出现读取位置是发生访问冲突。但是在实际运行中,nnn的值可能是随机的,这都有可能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++-opencv
相关文章推荐