【问题标题】:what happend to my Iterators?我的迭代器怎么了?
【发布时间】:2011-07-15 16:51:48
【问题描述】:

嗨,我的问题中存在一个对象classA,如下所示 typedef map myMap ;

static string keys[3] = { "11" , "22" , "33" };

class classA {
   myMap::const_iterator m_iterators[3];
  int classA::SetIterators(const myMap &AllData)
}

int classA::SetIterators(const myMap &AllData)
{
    m_iterators[0]=AllData.find(keys[0]);
    ....
    return VALID;
}

SetIterators 函数中,我想确保地图中是否存在某些键并将iterators 设置为它们 当我存在于SetIterators 中时,迭代器设置正确。 但是在返回后,它们会丢失它们的值并设置为 Bad Ptr。

我打电话给SetIterators,如下所示。

 int classA::BuildView(const myMap &AllData)
 {
      if(SetIterators(AllData)== VALID) 
 }

这是怎么发生的?我怎样才能防止这种情况? 谢谢赫兹。

【问题讨论】:

  • 你能显示调用SetIterators的代码吗?
  • 既然根据你的描述,问题出在调用者身上,为什么不展示你是如何使用这个类的呢?
  • 了解AllData 的确切类型会有所帮助。另外,您是否绝对确定迭代器会因为函数返回而变得无效?换句话说,您的程序的另一部分是否同时访问AllData?如果是,什么样的访问权限?
  • 构建此数据的其他线程,在这里我通过 refrens 获取此数据,但我认为这不是问题。
  • 我的猜测是您在调用树的更高位置传递了AllData 的临时副本。

标签: c++ stl map iterator


【解决方案1】:

在地图中添加或删除新值时,迭代器将失效。

【讨论】:

  • 当他真正使用地图时,这不是真的。映射迭代器在插入和擦除操作后仍然有效。
  • 是的,但这一直发生在返回后,这不可能是其他线程在同一步骤中每次都更改它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多