引发异常:读取访问冲突**这个**是0xCCCC

我试图建立对对象、数组和指针的理解。当我编译代码时,我最终得到了0xCCCC。我知道这个错误可能是由于未初始化的指针造成的。问题是我不知道去哪里,怎么去

#包括<iostream>
#包括<字符串>
使用名称空间std;
班主任{
公众:
字符串名;
};
无效创建人(人*人[]);
int main(){
人*人[5];
创造者(人);
对于(int i=0;i<5;i++){
职员姓名;
}
返回0;
}
void createPerson(Person*Person[]){
字符串n[5]={“Dwayne Johnson”、“Connor McGregor”、“海绵宝宝”、“蝙蝠侠”、“灰番茄酱”};
对于(int i=0;i<5;i++){
人员[i]->姓名=n[1];
}
}

我正在尝试显示姓名列表

问题是您有一个PersonPerson*Person[]指针数组,而不是Person数组。我修复了代码并删除了指针:

#包括<iostream>
#包括<字符串>
使用名称空间std;
班主任{
公众:
字符串名;
};
void createPerson(Person[]);
int main(){
个人[5];
创造者(人);
对于(int i=0;i<5;i++){
cout<<person[i]。姓名<<endl;
}
返回0;
}
void createPerson(Person[]){
字符串n[5]={“Dwayne Johnson”、“Connor McGregor”、“海绵宝宝”、“蝙蝠侠”、“灰番茄酱”};
对于(int i=0;i<5;i++){
人员[i]。姓名=n[i];
}
}

如您所见,我从数组定义中删除了指针。这样,Person对象在堆栈上初始化。以您的方式初始化指针,但它们不指向任何东西。这就是为什么会出现错误,因为指针悬空。如果您真的想使用指针数组,您必须像这样初始化这些指针:

#包括<iostream>
#包括<字符串>
使用名称空间std;
班主任{
公众:
字符串名;
};
无效创建人(人*人[]);
int main(){
人*人[5];
创造者(人);
对于(int i=0;i<5;i++){
职员姓名;
//删除此人,这样我们就不会泄露mem
删除人[i];
}
返回0;
}
void createPerson(Person*Person[]){
字符串n[5]={“Dwayne Johnson”、“Connor McGregor”、“海绵宝宝”、“蝙蝠侠”、“灰番茄酱”};
对于(int i=0;i<5;i++){
person[i]=新的person();
人员[i]->姓名=n[i];
}
}

顺便说一句:我不会这样使用指针。如果你是新来的,试着去理解一些东西,那么做实验是很好的。但您几乎应该始终使用智能指针,如std::shared\u ptr等。下一步要尝试的应该是容器和适当的数据结构

发表评论