与迭代器失效相关的错误,例如:0x008D1127 处有未经处理的异常(在 prog34.exe 中): 0xC0000005: 读取位置 0x010AC000 时发生访问冲突。

来源:清泛原创     2016-10-24 17:33:09    人气:     我有话说( 0 人参与)

错误代码:#include <iostream>#include <vector>using std::vector;using std::cout;using std::endl; 迭代器失效举例-避免存储end...

错误代码:
#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语句中重新获取迭代器,以避免此类错误。

迭代器 失效 0xC0000005 访问冲突

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: