0

私はvector<int>と呼ばれていpitchesます。bad access以下の最後の行で定期的に取得しています:

int play = 0;
bool didFind = 0;
vector<int>::const_iterator iterator;

for (iterator = pitches.begin(); iterator != pitches.end(); ++iterator) {
    if (*iterator > lastpitch) { // lastpitch is an int
        didFind = 1;
        play = *iterator;
        break;
    }
}

if (!didFind) play = *(pitches.begin()); // this line gives me bad access

私は以前*pitches.begin()に最後の行を試しましたが、それは常に悪いアクセスを提供し、今ではそれを理解しています。しかし、私は今ではあまり頻繁にそれを取得していませんが、これplay=*(pitches.begin());はまだ時々同じことをしています。私はそれを引き起こす上記の何も見ることができません、どんな提案もありがたいです。

4

1 に答える 1

4

pitchesvector が sizeの場合0、内部のもの

      for (iterator=pitches.begin();iterator!=pitches.end();++iterator)

実行されませんのでご了承didFind=0ください。

内部のステートメントifが評価されます。まだpitches空の手段pitches.begin()==pitches.end()です。aを逆参照するpitches.end()ことは範囲外にアクセスすることであり、したがって を与えbad accessます。

于 2013-02-18T02:41:33.773 に答える