_loadedFileNames的定义如下:
std::unordered_map<std::string, LoadedFileData*>* _loadedFileNames;
LoadedFileData 是一个结构体,具体实现忽略。
for (auto it = _loadedFileNames->begin(); it != _loadedFileNames->end();)
{
LoadedFileData*& lfd = it->second;
if(true)
{
it = _loadedFileNames->erase(it);
lfd-> (*这个地方会出错!!!!,因为上面 lfd 是使用的 it->second,上一句已经改变了it的地址,所以it->second也发生了改变)
}
else
{
++it;
}
}
在erase(it) 之后, 再次使用 lfd这个指针会发现指向的内容已经错误了。
本文探讨了C++中使用STL容器时遇到的一个常见问题:当遍历unordered_map并删除元素时,如何正确处理迭代器失效的情况。通过一个具体的例子,展示了不当操作可能导致的问题,并为读者提供了理解和解决此类问题的方法。
1076

被折叠的 条评论
为什么被折叠?



