C ++向数组添加元素

时间:2016-11-13 15:40:07

标签: c++ arrays dynamic

这是我的编程课作业的一部分。老师希望我们创建一些函数,其中一个函数会将元素添加到现有的动态结构数组中,这就是我遇到的麻烦。

根据我在网上找到的不同帖子,

这是我对该功能应如何运作的理解:

  1. 创建一个比现有

  2. 更大的新数组
  3. 将旧数组的内容复制到新数组

  4. 将新元素添加到新数组

  5. 销毁旧数组

  6. 然而,有些事情是错误的,程序崩溃了 - 我认为问题在于我尝试做第3点和第4点的方式。有人可以看看吗?我真的很感激任何帮助。

    编辑:忘记提及,老师希望功能设置为无效,他们应该不返回任何内容。

    以下是代码:

    const int size = 2;
    
    struct Player {
        string name;
        string kind;
    };
    
    void addplayer(Player * plarr, int size) {
    
        cout << "Adding a new element to the array" << endl << endl;
    
        //creating a new, bigger array:
        Player * temp = NULL;
        temp = new Player[size+1];
    
        //copying the content of the old array
        for (int i=0;i<size;i++) {
            temp[i].name = plarr[i].name;
            temp[i].kind = plarr[i].kind;   
        }
    
        //adding the new element:
        string name, kind;
        cout << "Choose the name for the new player: " << endl;
        cin >> name;
        cout << "Choose the class for the new player: " << endl;
        cin >> kind;
    
        temp[size+1].name = name;
        temp[size+1].kind = kind;
    
        //deleting the old array, replacing it with the new one
        delete[] plarr;     
        plarr = temp; 
    
    }
    

1 个答案:

答案 0 :(得分:4)

void addplayer(Player * plarr, int size) {

plarr参数按值 传递给此函数

除了一个错误外,此函数似乎分配了一个新数组并正确复制了内容:

temp[size+1].name = name;
temp[size+1].kind = kind;

此处的索引应为size。但最大的错误是该函数以:

结束
    delete[] plarr;     
    plarr = temp; 
}

不幸的是,由于plarr是按值传递的,所以这一切都是将此函数的plarr参数设置为新指针,然后返回。

这完全没有任何结果,因为此函数的调用者仍然具有其原始指针。现在已被销毁。

您应该将此函数更改为return调用者需要保存的新指针,而不是原始指针。