我遇到了一个我似乎无法解决的问题。 我在另一个地图里面有一个地图,里面有两个指针。
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;首先;
答案 0 :(得分:1)
问题是,我试图在删除声音之前删除SoundBuffer,这取决于声音缓冲开头:
这样可行:删除i-&gt;秒;删除i-&gt;首先;