gpt4 book ai didi

C++ 向数组添加元素

转载 作者:行者123 更新时间:2023-11-30 01:41:54 69 4
gpt4 key购买 nike

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

根据我在网上找到的不同帖子,这是我对该功能应该如何工作的理解:

  1. 创建一个比现有数组更大的新数组

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

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

  4. 销毁旧数组

但是,出了点问题,程序崩溃了 - 我认为问题在于我尝试执行第 3 点和第 4 点的方式。有人可以看一下吗?我真的很感激任何帮助。

编辑:忘了说了,老师希望函数设置为 void,它们应该不返回任何东西。

代码如下:

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;

}

最佳答案

void addplayer(Player * plarr, int size) {

plarr 参数按值传递给此函数。

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

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

这里的索引应该是size。但最大的错误是该函数以:

    delete[] plarr;     
plarr = temp;
}

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

这完全没有完成任何事情,因为这个函数的调用者仍然有它的原始指针。现在已被销毁。

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

关于C++ 向数组添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575611/

69 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com