Индекс вектора вне допустимого диапазона C++

У меня есть этот метод в одном из моих файлов cpp, где я обнаружил свою неудачу. Я также добавил операторы cout и проверил наличие содержимого как в foo, так и в mainWord. Я думаю, что моя проблема связана с тем, как я добавил элементы в foo или как я пытаюсь добавить их повторно. Размер mainWord равен 88, а размер foo больше 1000. Здесь я добавляю элементы в foo:

while (myfile>>magic)//store the colours in an array
{
     foo.push_back(magic);
}

и здесь я пытаюсь изменить их и добавить обратно.

void Penguin::addWord(std::vector<int> foo)
 {
 unsigned fooCounter=0;
 int temp;
for (int i=0;i<88;i+2)
 {
     if(foo.at(fooCounter) == 11111111 && foo.at(fooCounter) != NULL)
     {
         if(mainWord[i]==1 && mainWord[i+1]==1)
         {
             foo.at(fooCounter) = 11111111;
         }
         else if(mainWord[i]== 1 && mainWord[i+1] == 0)
         {
                 foo.at(fooCounter) = 11111110;
         }
         else if(mainWord[i]== 0 && mainWord[i+1] == 1)
         {
             foo.at(fooCounter) = 11111101;
         }
         else
        {
                 foo.at(fooCounter) = 11111100;
        }
     }
     else if (foo.at(fooCounter) == 11111111 && foo.at(fooCounter) != NULL)
     {
         if(mainWord[i]== 1 && mainWord[i+1] == 1)
         {
             foo.at(fooCounter) = 00000011;
         }
         else if(mainWord[i]== 1 && mainWord[i+1] == 0)
         {
             foo.at(fooCounter) = 00000010;
         }
         else if(mainWord[i]== 0 && mainWord[i+1] == 1)
         {
             foo.at(fooCounter) = 00000001;
         }
         else
        {
            foo.at(fooCounter) = 00000000;
         }
     }
     fooCounter++;
 }

}

Я продолжаю получать сообщение об ошибке: «Ошибка утверждения отладки. Индекс вектора вне допустимого диапазона»... Пожалуйста, помогите


person user3474409    schedule 18.11.2014    source источник
comment
for (int i=0;i<88;i+2) Как вы проверяете, что ваш вектор содержит не менее 44 элементов?   -  person πάντα ῥεῖ    schedule 18.11.2014
comment
@πάνταῥεῖ, 89, так как шаг 2.   -  person gsamaras    schedule 18.11.2014
comment
@ G.Samaras На самом деле меньше (44), потому что fooCounter - это скомпрометированный индекс.   -  person πάντα ῥεῖ    schedule 18.11.2014
comment
В дополнение к этому вы передаете foo по значению. Таким образом, вся та работа, которую вы выполняете внутри функции для изменения foo, идет насмарку, как только функция возвращается. Передайте foo по ссылке, а не по значению.   -  person PaulMcKenzie    schedule 18.11.2014
comment
О, хорошая мысль @πάνταῥεῖ!   -  person gsamaras    schedule 18.11.2014
comment
Вы правы, @PaulMcKenzie!   -  person user3474409    schedule 18.11.2014


Ответы (1)


У вас бесконечный цикл, потому что i никогда не обновляется в цикле for. Вам нужно исправить опечатку:

for (int i=0;i<88;i+=2)
                    ^
                    ^
person Mark Ransom    schedule 18.11.2014
comment
Победитель куриного ужина, спасибо, @Mark Ransom - person user3474409; 18.11.2014