lea*_*ner 1 c++ pointers map multimap
我想在C++中使用multimaps.主要目的是存在一个存储多图指针的地图.
现在,当我尝试插入多图时,我遇到了问题.有人能告诉我哪里出错了.
typedef multimap<int,int> mm;
typedef map<int,mm*> v_map;
int main()
{
v_map map1;
v_map::iterator it;
it = map1.find(23);
mm *mm_map_pointer;
if( it == map1.end())
{
mm m_map1;
map1[23] = &m_map1;
mm_map_pointer = &m_map1;
}
else
{
mm_map_pointer = it->second;
}
mm_map_pointer->insert( pair<int, int>(1, 2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题出在mm_map_pointer-> insert(pair(1,2)); 有人可以帮忙吗?
{
mm m_map1;
map1[23] = &m_map1;
mm_map_pointer = &m_map1;
} // end of scope
Run Code Online (Sandbox Code Playgroud)
你的问题是m_map1超出范围并被销毁,留下一个悬空指针.
你m_map1是一个局部变量,并且你正试图在你的变量中存储一个指针map.当包含该变量的块退出时,这会导致悬空指针.
您有两种方法可以解决这个问题:
我的优选的方法是存储multimap在map直接(即,不使用指针).作为奖励,这可以简化您的代码很多:
typedef multimap<int, int> mm;
typedef map<int, mm> v_map;
v_map map1;
map1[23].insert(make_pair(1, 2));
Run Code Online (Sandbox Code Playgroud)
而已!
你的另一个选择是用来new创建一个持久的副本multimap.在这种情况下,您map应该保留一个,shared_ptr<multimap<...> >这样您就不必multimap手动取消分配.