c ++ map map中的地图 - 删除指针

时间:2015-02-18 10:09:16

标签: c++

我遇到了一个我似乎无法解决的问题。 我在另一个地图里面有一个地图,里面有两个指针。

std::map<std::string,std::map<sf::SoundBuffer*,sf::Sound*>> listSound;

当我尝试使用以下代码释放分配的内存时,我收到以下错误: map / set iterator not incrementable

它的调试断言如前所述失败并在Visual Studio \ 11.0 \ VC \ INCLUDE \ xtree中的第262行抛出当我按预期关闭程序时会发生这种情况。

这是析构函数中的代码:

~AudioManager()
{
    typedef std::map<sf::SoundBuffer*, sf::Sound*> typeInnerMap;
    typedef std::map<std::string, typeInnerMap> typeOuterMap;
    typedef typeInnerMap::iterator inner_iter_t;
    typedef typeOuterMap::iterator outer_iter_t;

    for (outer_iter_t o = listSound.begin(); o != listSound.end(); ++o)
    {
        for (inner_iter_t i = o->second.begin(); i != o->second.end(); i++)
        {
            delete i->first;
            delete i->second;
        }
    }

}

这就是我插入一个值的方法:

sf::SoundBuffer* soundbuffer = new sf::SoundBuffer();
soundbuffer->loadFromFile(_file);
sf::Sound* sound = new sf::Sound(*soundbuffer);
typedef std::map<sf::SoundBuffer*, sf::Sound*> mapType;
listSound[_file].insert(mapType::value_type(soundbuffer, sound));

我做错了什么?

提前致谢

编辑:已解决。

问题是,我试图在删除声音之前删除SoundBuffer,这取决于声音缓冲开头:

这样可行:                 删除i-&gt;秒;                 删除i-&gt;首先;

1 个答案:

答案 0 :(得分:1)

问题是,我试图在删除声音之前删除SoundBuffer,这取决于声音缓冲开头:

这样可行:删除i-&gt;秒;删除i-&gt;首先;