【发布时间】: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的临时副本。