C++ C++;将值分配到结构的动态数组时,程序停止工作?
我在运行分配给我修改的代码时遇到问题 代码正常工作,但是我被要求测试代码中的一个函数,所以我制作了一组数据,我会给函数测试输出是否是所需的 但是,每当我运行代码时,就会出现一个消息框,表明程序已停止工作 以下是代码的开头:C++ C++;将值分配到结构的动态数组时,程序停止工作?,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,我在运行分配给我修改的代码时遇到问题 代码正常工作,但是我被要求测试代码中的一个函数,所以我制作了一组数据,我会给函数测试输出是否是所需的 但是,每当我运行代码时,就会出现一个消息框,表明程序已停止工作 以下是代码的开头: int main(int argc, char *argv[]) { int nrMonsters; cout << "Hello World!" << endl; Monsters *monster[20]={0};
int main(int argc, char *argv[])
{
int nrMonsters;
cout << "Hello World!" << endl;
Monsters *monster[20]={0};
cout<<"Beginning of Test\n...\n";
//the first data set prepared for testing
Monsters *date1[4]= {0};
//date1 - CC BB AA DD
date1[0]->name="CC";
date1[1]->name="BB";
date1[2]->name="AA";
date1[3]->name="DD";
for (int a=0;a<4;a++)
{
date1[a]->type=BALAUR;
date1[a]->health=10;
}
cout<<"Set date1 initialised.";
cout<<"\n\nSorting set date1...\t";
sortMonster(4,date1);
以下是该函数的要求(按字母顺序排列):
当我将鼠标悬停在第二个参数上方时,它显示
“怪物**怪物”
但当我把它悬停在初始化代码的顶部时,它会读
“怪物*mosnter[]”
有人知道如何解决这个问题吗?
谢谢。您必须分配内存
Monsters *date1 = new Monsters[4];
或者使用C风格
别忘了通过释放分配的内存
delete []date1;
或
Monsters*monster[20]
您从不为这些指针中的任何一个分配内存。date1
是由四个空指针组成的数组。你取消了引用。导致。或者创建怪物变量
并使指针指向这些对象(如果需要静态对象),或者为数组中的每个指针分配内存并访问数组元素(如果需要动态对象-这里不要忘记在上次使用后释放/删除它们),您没有“动态数组”在你的代码中。不要建议在怪物上使用malloc
。使用malloc
分配这些数组将导致未定义的行为(因为std::string
作为成员,并且malloc
不调用构造函数)。
Monsters *date1 = new Monsters[4];
delete []date1;
free(date1); // if allocated with malloc/calloc