2017-08-10 75 views
-3

我无法运行我已分配修改的代码。当将值分配给动态数组结构时,C++程序停止工作?

代码正常工作,但我被要求测试代码中的一个函数,所以我提供了一组数据,我会给函数测试输出是否是所需的。

但是,每当我运行我的代码时,会出现一个消息框,指出程序已停止工作。

下面的代码的开头:

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); 

这里的结构是什么:

enum MonsterTypes 
{ 
    UNDEFINED=-1, 
    VARCOLAC, 
    CAPCAUN, 
    PAIANJEN, 
    SPIRIDUS, 
    STRIGOI, 
    BALAUR 
}; 

struct Monsters 
{ 
    MonsterTypes type; 
    std::string name; 
    int health; 
}; 

这里的功能的要求(它的意思是按字母顺序排序):

void sortMonster(int number_of_monsters, Monsters **monster) 
{ 
/ /sorting 
} 

当我将鼠标悬停在第二个参数上方时,它显示 “怪物怪物**” 但是当我在那里的初始化代码的顶部悬停,它读取 ‘怪物* mosnter []’

有谁知道如何解决这一问题? 谢谢。

+4

释放分配的内存'怪物*怪物[20]'你永远不会为分配内存任何这些指针。 – user0042

+0

'date1'是一个由四个空指针组成的数组。你解除引用。导致[*未定义的行为*](http://en.cppreference.com/w/cpp/language/ub)。 –

+0

要么创建“怪物变量”,并使指针指向这些对象(如果需要静态对象),还要为数组中的每个指针分配内存并访问数组的元素(如果需要动态对象 - 这里不要忘记释放/在最后一次使用后删除它们) –

回答

1

您必须分配内存。

Monsters *date1 = new Monsters[4]; 

或者使用C++风格malloc

不要忘记通过

delete []date1;  

free(date1); // if allocated with malloc/calloc 
+0

不要在'Monsters'上推荐使用'malloc'。使用'malloc'分配这些数组,会导致未定义的行为(由于'std :: string'作为成员,并且'malloc'不调用构造函数)。 –