我有一个称为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());仍然偶尔会做同样的事情。我在上面看不到会导致这种情况的任何建议,对此表示赞赏。

最佳答案

如果pitches向量的大小为0,则里面的东西

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


不会执行,因此didFind=0

if中的语句将被评估。但是pitches为空表示pitches.begin()==pitches.end()。取消引用pitches.end()是为了访问超出范围,因此给出bad access

10-02 04:52