【发布时间】:2020-02-23 05:33:20
【问题描述】:
我不断收到运行时错误double free or corruption (!prev)。我花了一段时间尝试,我想我可以想出更小的可重现的例子。
此代码会产生类似的“双重释放”错误。这里发生了什么?我认为set::erase 增加了迭代器。
#include <iostream>
#include <set>
#include <string>
int main() {
std::set<int> tmp = {1,2,3};
for(auto num = tmp.begin(); num != tmp.end(); ) {
if(true) {
std::cout << "removing...\n";
tmp.erase(num);
}
}
return 0;
}
【问题讨论】: