0xC0000005: 读取位置 0x00617568 时发生访问冲突。
这个令一个像我这种正在学习的小菜鸟非常崩溃的异常。
对于这个异常,有个大佬总结了一下:
0xC0000005可能出现的原因:
- 是否访问的内存地址为空指针
- 是否使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”
- 是否出现访问数组越界,malloc一个100内存的空间用于读入文件,当文件的大小超过100时,并且程序中再使用100之后的内存时,就会产生“0xC0000005: 读取位置 xxx时发生访问冲突”这样的错误。
- 内存分配虽然成功,但是尚未初始化就引用它。
- 然而这些都排查过了,依然没有任何头绪
我似懂非懂的看了看,与我这个一一比对,好像都没有奥。
我这是学习的初级阶段,不会涉及那么复杂的原因。
// vector存放自定义数据类型
class Person
{
public:
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
// vector存放自定义数据类型
void test02() {
vector<Person> v;
string name = "xiaohua";
Person p1(name, 10);
Person p2(name, 20);
Person p3(name, 30);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
for (vector<Person>::const_iterator it = v.begin(); it != v.end(); it++) {
cout << "Name: " << (*it).m_Name << " Age:" << (*it).m_Age << endl;
}
}
int main()
{
test02();
system("pause");
return 0;
}
就这么简简单单的几行代码,咋会报这种级别的错呢?
我尝试更改Person类的属性,结果就不会报错,难道是vector容器存的自定义类型里面内含的类型不能有string吗?
这样岂不是太不方便了!
我想到了我在这个目录下的其他cpp文件里面也写了Person类,他也就是这么两个属性,并且也创建了几个对象,而且命名也就是p1、p2这么命名的。
于是我把这个Person对象改了个名字,就好了。
所以,那些看起来你完全不知道、不理解的错。可能你不是犯得那个错,而是其他的某些地方不规范。
还是不清楚具体是哪一点出错了,以后整明白了再写。