与迭代器失效相关的错误,例如:0x008D1127 处有未经处理的异常(在 prog34.exe 中): 0xC0000005: 读取位置 0x010AC000 时发生访问冲突。
清泛原创
错误代码:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;
//迭代器失效举例-避免存储end操作返回的迭代器
int main()
{
vector<int> ivec;
ivec.push_back(3);
ivec.push_back(5);
ivec.push_back(7);
vector<int>::iterator end = ivec.end();
for(vector<int>::iterator first = ivec.begin();first != end;++first)
cout<<*first<<endl;
ivec.insert(ivec.begin(),1);
//cause fatal error
for(vector<int>::iterator first = ivec.begin();first != end;++first)
cout<<*first<<endl;
return 0;
}
解决办法: 这里保存了end操作返回的迭代器,然后又在容器中执行插入操作,导致迭代器失效,因而第二次的输出操作无法正常结束导致死循环,产生访问冲突。要警惕迭代器失效的操作,c++ primer建议假设迭代器失效是最安全的做法。这里可以在for语句中重新获取迭代器,以避免此类错误。
上一篇:error C2664: “std::list<_Ty>::list(const std::allocator<_Ty> &)”: 不能将参数 1 从 “std::vector<_Ty>”转换为“const std::allocator<_Ty> &”
下一篇:...VC\INCLUDE\iterator(93) : error C2039: “push_front”: 不是“std::vector<_Ty>”的成员