1

我正在尝试在 C++ 中使用多图。主要目的是有一个存储多映射指针的映射。

现在,当我尝试插入多图时,我遇到了问题。有人可以告诉我哪里出错了。

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;
}

问题在于 mm_map_pointer->insert(pair(1, 2)); 有人可以帮忙吗?

4

2 回答 2

5
{
 mm m_map1; 
 map1[23] = &m_map1;
 mm_map_pointer = &m_map1;
} // end of scope

您的问题是m_map1超出范围并被破坏,留下一个悬空指针。

于 2011-04-26T15:52:06.360 回答
5

m_map1是一个局部变量,你试图在你的map. 当包含该变量的块退出时,这会导致一个悬空指针。

你有两种方法可以解决这个问题:

  • 我首选的方法是直接存储multimapmap即不使用指针)。作为奖励,这大大简化了您的代码

    typedef multimap<int, int> mm;
    typedef map<int, mm> v_map;
    
    v_map map1;
    map1[23].insert(make_pair(1, 2));
    

    就是这样!

  • 您的另一个选择是用于new创建multimap. 在这种情况下,您map应该持有 ashared_ptr<multimap<...> >这样您就不必multimap手动解除分配。

于 2011-04-26T15:52:23.343 回答