Я получаю ошибку времени выполнения 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;
}