【发布时间】:2017-03-23 18:30:37
【问题描述】:
为什么下面的代码会崩溃?
int main(int argc, const char * argv[]) {
std::list<int> aList={1,2,3,4,5};
std::list<int>::reverse_iterator i=aList.rbegin();
i++;
i++;
assert(*i==3);//assertion passes as expected
while (i!=aList.rbegin()) { //never becomes false
aList.pop_back(); //segmentation fault
}
assert(*(aList.rbegin())==3);
return 0;
}
我假设 rbegin 最终会等于 i 并停止循环;但是没有发生。
注意我做了以下解决方法,仍然好奇上面的代码有什么问题
size_t differance =std::distance( aList.rbegin(),i);
while (differance >0) {
aList.pop_back();
differance--;
}
assert(*aList.rbegin()==3);
【问题讨论】:
-
请不要将容器名称与变量名称混用
-
while (differance >0) {不是解决办法