我有一个称为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
。