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;

}

4

3 に答える 3

3
> while(code2 == "*11" ) {
>     section.push_back( blocks[ index ] );
>     index++; }

絶対に渡せない…

i = index - 1;

無限ループで終わる可能性がある

于 2013-10-11T10:19:01.053 に答える
2

範囲外のインデックス作成場所0 <= i < size:

 blocks [i+1]

i+1の有効なインデックスを超えていますi=blocks.size()-1

さらに、このループは終了しません。

while(code2 == "*11" ) {
   section.push_back( blocks[ index ] );
   index++;
}
于 2013-10-11T10:16:51.150 に答える
0

コード 2 = ブロック [ i+1 ].substr(0,3);

また、これは無限ループです: while(code2 == "*11" ) {

                section.push_back( blocks[ index ] );
                index++; }
于 2013-10-11T10:33:10.417 に答える