使用函数内部的迭代器擦除map元素



我需要在函数内部使用迭代器来擦除映射元素,该函数以映射迭代器为参数,但出现运行时错误(free((:检测到双free(。这是我的代码:

#include <iostream>
#include <map>
std::map<int32_t, int32_t> mapp;
void erasee(std::map<int32_t, int32_t>::iterator itr) {
itr = mapp.erase(itr);
}
int main()
{
mapp.emplace(1, 1000);

std::map<int32_t, int32_t>::iterator itr = mapp.begin();
while(itr != mapp.end()) {
std::cout << "before" << std::endl;

erasee(itr);

std::cout << "after" << std::endl;
}

return 0;
}

itr通过值传递给erasee。因此,在erasee返回后,重新分配它没有任何效果。

作为一个快速解决方案,您可以通过引用传递它:

void erasee(std::map<int32_t, int32_t>::iterator & itr) {

尽管返回一个新的迭代器可能是一个可读性更强的解决方案。

最新更新