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。
答案 0 :(得分:2)
除了更简单(可能在调查内存泄漏时被替换)
file_source_map.insert(std::make_pair(newfilename, it->second));
file_source_map.erase(it);
并检查两个文件名是否相同(不会泄漏,但实际上擦除了条目),代码没有明显的错误。
检查其他内容(比如分配器?)。
答案 1 :(得分:0)
由于密钥在std :: map中是唯一的,你不应该删除旧密钥,值,然后插入新密钥值吗?