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

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

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

不会被执行,因此didFind=0.

内部的语句if被评估。却pitches是空虚的意思pitches.begin()==pitches.end()。取消引用 apitches.end()是为了越界访问,因此给出bad access.

于 2013-02-18T02:41:33.773 回答