c++ - 遍历映射并删除动态分配的元素

标签 c++ visual-studio-2010 memory-leaks sdl

这是我的代码:

void SurfaceManager::SurfaceManagerDelete()
{
    for(map<string,SurfaceManager*>::iterator Iter = SurfaceList.begin(); Iter != SurfaceList.end(); ++Iter)
    {
        delete (*Iter).second;

        (Iter) = SurfaceList.erase(Iter);
    }

   SurfaceList.clear();
}

为什么当我用 VLD 扫描它时会导致多次内存泄漏?我知道这与我从元素中删除内存的方式有关,特别是这一行“(Iter)= SurfaceList.erase(Iter);”,但我想知道为什么,以及我应该如何从列表中正确删除元素。

最佳答案

问题出在 for 循环中的++Iter。那是因为

(Iter) = SurfaceList.erase(Iter);

已经更新 Iter 以指向被删除元素之后的元素,就像一个增量。

所以++Iter 然后跳过另一个元素,实际上你最终删除了所有其他元素!

关于c++ - 遍历映射并删除动态分配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555773/

相关文章:

c++ - 错误 C3861 : '_beginthreadex' : identifier not found

c# - 在 VS2010 中创建复合键

c++ - 按类型获取元组元素(C++0x 之前)

visual-studio-2010 - 安装ClickOnce发布的支持DPI的应用程序

pointers - 为什么 Rust 认为泄漏内存是安全的?

c# - 将字节数组转换为内存流和位图导致内存使用率高

c++ - 用 min_element boost 信号

c++ - 是否允许符合标准的 C++ 编译器优化 <= 0 上的无符号整数分支?

c++ - C++ 中 SSE 的内存对齐,_aligned_malloc 等效?

iphone - 内存泄漏问题