【问题标题】:std::out_of_range errorstd::out_of_range 错误
【发布时间】:2011-11-30 19:35:10
【问题描述】:

我正在 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 的实例后调用终止

【问题讨论】:

    标签: c++ opencv std out


    【解决方案1】:

    问题是当有效索引为 0 到 N - 1 时,您正在使用从 0 到 N 的循环。这就是为什么您在最后一次迭代中遇到异常:std::vector::at 执行边界检查,如果您不在bounds 然后一个std::out_of_range 被抛出。

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

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

    【讨论】:

      【解决方案2】:
      for (int i=0;i<=x_captured.size();i++)
              {
                  for (int j=0;j<=y_captured.size();j++)
      

      您应该将&lt;= 更改为&lt;,然后重试。

      名为 Billy 的示例数组:大小:5 但最后一个索引是 4。明白了吗? :)

      【讨论】:

      • 请注明您的来源:"Complete C++ Tutorial"(点击查看更多!)作者:Juan Soulié(下载as PDF
      • @sehe 哈哈,那是我想到的第一个搜索位置 :)
      猜你喜欢
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2018-01-05
      相关资源
      最近更新 更多