如何解决使用函数内的迭代器擦除地图元素
我需要在函数中使用迭代器擦除地图元素,该函数将地图迭代器作为参数,但运行时错误(free(): double free detected)。这是我的代码:
#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) {
虽然返回一个新的迭代器可能是一个更具可读性的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。