Ошибка std :: out_of_range - PullRequest
       18

Ошибка std :: out_of_range

4 голосов
/ 30 ноября 2011

Я работаю над следующим кодом в opencv в Linux Ubuntu.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 ]

5 голосов
/ 30 ноября 2011

Проблема в том, что вы используете цикл от 0 до N, когда действительные индексы от 0 до N - 1. Вот почему вы получаете исключение на последней итерации: 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++)
    {
        ...
    }
}
4 голосов
/ 30 ноября 2011
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. Получите? :)

...