内存泄漏有问题 - 在std :: map中重新绑定键

时间:2010-11-26 16:12:52

标签: c++ map

void filename_changed(string originalfilename, string newfilename) {
    auto it = file_source_map.find(originalfilename);
    if (it == file_source_map.end())
        return;
    file_source_map.insert(std::pair<const string, string>(newfilename, it->second));
    file_source_map.erase(originalfilename);
}

我替换了std :: map和std :: string的分配器,所以我肯定知道这是泄漏内存,但我看不出问题。如果地图中存在originalfilename,请将其值插入newfilename,并擦除originalfilename。

2 个答案:

答案 0 :(得分:2)

除了更简单(可能在调查内存泄漏时被替换)

file_source_map.insert(std::make_pair(newfilename, it->second));
file_source_map.erase(it);

并检查两个文件名是否相同(不会泄漏,但实际上擦除了条目),代码没有明显的错误。

检查其他内容(比如分配器?)。

答案 1 :(得分:0)

由于密钥在std :: map中是唯一的,你不应该删除旧密钥,值,然后插入新密钥值吗?