Boost :: map erase()使迭代器无效

时间:2014-04-28 10:02:10

标签: boost shared-memory erase

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

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

中有时会出现崩溃

1 个答案:

答案 0 :(得分:0)

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

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