std :: out_of_range错误

时间:2011-11-30 19:35:11

标签: c++ opencv std out

我正在使用Linux Ubuntu中的opencv中的以下代码。 x_captured和y_captured是“int”类型向量。两种载体的大小均为18。

for (int i=0;i<=x_captured.size();i++)
{
    for (int j=0;j<=y_captured.size();j++)
    {
        if (i!=j)
        {
            if (((x_captured.at(j)-x_captured.at(i))<=2) && 
                ((y_captured.at(j)-y_captured.at(i))<=2))
            {
                consecutive=consecutive+1;
            }
        }
    }
}

但是当i = 0且j = 18之后,它会引发以下错误:

  

在抛出'std :: out_of_range'的实例后调用终止what():vector :: _ M_range_check

2 个答案:

答案 0 :(得分:5)

问题是当有效索引为0到N-1时,您使用从0到N的循环。这就是您在最后一次迭代时获得异常的原因:std::vector::at执行绑定检查,如果您是超出范围然后抛出std::out_of_range

您需要将循环的条件更改为<,而不是<=

for (int i = 0; i < x_captured.size(); i++)
{
    for (int j = 0; j < y_captured.size(); j++)
    {
        ...
    }
}

答案 1 :(得分:4)

for (int i=0;i<=x_captured.size();i++)
        {
            for (int j=0;j<=y_captured.size();j++)

您应该将<=更改为<,然后重试。

enter image description here

名为Billy的示例数组:大小:5但最后一个索引是4.获取它? :)