映射内的c++映射-删除指针
c++ map inside map - delete pointer
我遇到了一个似乎无法解决的问题。我在另一张地图里面有一张地图,里面有两个指针。
std::map<std::string,std::map<sf::SoundBuffer*,sf::Sound*>> listSound;
当我尝试使用以下代码释放分配的内存时,我会得到以下错误:映射/设置迭代器不可递增
如前所述,它是一个调试断言失败,并在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->秒;先删除i->;
问题是,我试图在删除声音之前删除SoundBuffer,这取决于声音缓冲区的开头:
所以这是有效的:删除i->second;先删除i->;
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何从多映射中删除特定的重复项
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- C++映射不删除元素
- c++:复制、删除和运算符=在原始指针映射中
- 当覆盖映射中的复杂对象键时,旧对象将被删除(C++)
- 删除 std::函数映射
- c++ 在循环中删除迭代器(映射的映射)
- 如何在多映射 c++ 中删除重复值?
- 在 c++ stl 映射中,删除具有重复值的条目
- 使用有序映射删除共享指针
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 删除映射中的指针会导致内存错误
- 静态映射中动态分配的对象.删除必要的
- 删除多重映射中的重复键
- 删除C++STL多映射中特定键的条目
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 映射内的c++映射-删除指针