【发布时间】:2012-11-09 19:06:59
【问题描述】:
也许你能告诉我我目前遇到的一个问题。 所以问题是当我试图擦除地图中的一些元素时,我得到了一个糟糕的访问内存。 我们假设以下 typedef :
typedef std::map < std::string *, Document *, pStringCompare > Map;
我们假设在执行以下所有代码之前,我们已经实例化了一个包含两个元素(例如)的映射。 这段代码运行良好:
Map::iterator it = documents.begin();
std::string *s = it->first;
Document *d = it->second;
documents.erase(it);
delete d;
delete s;
但是当我尝试使用迭代器循环时,我得到了错误。
for (Map::iterator it = documents.begin() ; it != documents.end() ; it++)
{
std::string s = * ( it->first);
Document dd = * (it->second);
std::cout << s << " || " << dd;
documents.erase(it); // This line causes the bad access memory error.
}
感谢您的帮助!真的很感谢!
亚历克斯
【问题讨论】:
-
你确定是发生错误的那一行吗?我希望它发生在增量 (
it++) 上,因为在调用erase()之后,it变为 invalid。