与迭代器失效相关的错误,例如: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语句中重新获取迭代器,以避免此类错误。

迭代器 失效 0xC0000005 访问冲突

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部