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