这是我的编程课作业的一部分。老师希望我们创建一些函数,其中一个函数会将元素添加到现有的动态结构数组中,这就是我遇到的麻烦。
根据我在网上找到的不同帖子,这是我对该功能应如何运作的理解:
创建一个比现有
将旧数组的内容复制到新数组
将新元素添加到新数组
销毁旧数组
编辑:忘记提及,老师希望功能设置为无效,他们应该不返回任何内容。
以下是代码:
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;
}
答案 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
调用者需要保存的新指针,而不是原始指针。