Программа перестает работать при вызове функции.

0

Существует проблема где-то в этой функции, к сожалению компилятор не говорит, где. Программа просто перестает работать, и ее нужно отключить.

Я начинаю в c++, поэтому я маз сделал что-то глупое, но я не знаю, что.

Я буду благодарен за любую помощь.

vector< vector<string> >gsiread16::make_section(vector<string> blocks) {

string code;
string code2;
vector<string> section;
vector< vector<string> > sections;

for ( int i = 0; i < blocks.size(); i++) {

    code = blocks[ i ].substr(0,3);

    if( code == "*41" ) {

                code2 = blocks[  i+1 ].substr(0,3);

                if( code2 != "*11" ) continue;

                int index = i +1;

                while(code2 == "*11" ) {

                    section.push_back( blocks[ index ] );
                    index++;

                }

                sections.push_back(section);
                section.clear();
                i = index - 1;

    } else continue;

}

return sections;

}

Теги:

3 ответа

2
Лучший ответ

Вне связанного индексации, где 0 <= я < size:

 blocks [i+1]

i+1 превышает допустимый индекс, где i=blocks.size()-1.

Более того, этот цикл никогда не заканчивается:

while(code2 == "*11" ) {
   section.push_back( blocks[ index ] );
   index++;
}
  • 0
    Я работаю с файлом. Блок представляет одну строку в файле, и после строки, которая начинается с * 41, всегда будет другая строка
  • 0
    @Jefffrey: Если управление переходит в цикл, нет ничего, что могло бы нарушить цикл или изменить условие.
Показать ещё 1 комментарий
3
> while(code2 == "*11" ) {
>     section.push_back( blocks[ index ] );
>     index++; }

который никогда не может быть передан...

i = index - 1;

может закончиться бесконечной петлей

  • 0
    Почему это нельзя пропустить?
  • 1
    потому что переменная code2 никогда не меняется внутри цикла ...
Показать ещё 1 комментарий
0

За пределами достигнуты, когда я = blocks.size() -1 для: code2 = blocks [i + 1].substr(0,3);

Также это бесконечный цикл: while (code2 == "* 11") {

                section.push_back( blocks[ index ] );
                index++; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню