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

这个问题我最近遇到过几次,主要是在做特征点检测,或者有用到有数组或者向量的情况下,有可能会出现这种情况,可能出现这种问题的情况有很多,我现在说一下我发现的问题:
这几次出现这种问题基本都是溢出问题,比如一个向量他的大小为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的值可能是随机的,这都有可能。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值