【问题标题】:Boost::map erase() makes iterator invalidBoost::map erase() 使迭代器无效
【发布时间】:2014-04-28 10:02:10
【问题描述】:

我正在使用 boost 共享内存并且有一个 (key,value) 的映射。使用下面的代码,我尝试遍历地图并删除条目。间歇性地看到崩溃。

for (int_vector::iterator it = v.begin(); it != v.end(); /* BLANK */){
  if (*it == 1) //some condition
  {
     it = v.erase(it);
  } 
else {
     ++it;
  }

}

上面的代码有什么问题?仅在 rbtree_best_fit.hpp 中有时会出现崩溃

【问题讨论】:

  • 现在是矢量图还是地图?此外,您的问题可能是缺乏同步

标签: boost shared-memory erase


【解决方案1】:

当您使用共享内存时,我猜您有多个进程/线程访问该向量。如果您没有使用同步(同一个库中有一个互斥锁),则很可能该向量在被另一个进程遍历时被一个进程破坏。

除了以上考虑之外,你的代码在单线程环境中是正确的,如果你是单线程的,那么下一步自然是在 Valgrind 下运行程序。

【讨论】:

  • 谢谢!!我正在通过在共享内存上使用作用域锁来处理同步。
猜你喜欢
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多