gpt4 book ai didi

c++ - 类内的类数组 - 动态数组的问题 (c++)

转载 作者:行者123 更新时间:2023-11-30 04:04:47 25 4
gpt4 key购买 nike

我的作业是我必须创建一个类(寄存器),其中包含动物类中的 3 个类数组(鸟类、哺乳动物、爬行动物)。 Animal 是 Register 的 friend 。为了简单起见,我只会展示鸟类部分。

注册类如下所示:

class Register
{
Bird* birds;
unsigned int birdSize;
public:
...
}

寄存器的构造函数:

Register::Register()
{
this->birds = new Bird[0];
this->birdSize = NULL;
}

现在我在 register 中有一个函数,它向 birds 数组添加一个元素,输入是 cin。

void Register::add()
{
...
if (birdSize == 0)
{
birds = new Bird[0];
Bird* temp = new Bird[0];
temp[0].add();
this->birds = temp;
birdSize++;
}
else
{
Bird* temp = new Bird[birdSize+1];
for (unsigned int i=0; i<=birdSize; i++)
{
temp[i] = this->birds[i];
}
temp[birdSize+1].add();
birds = new Bird[birdSize+1];
birds = temp;
birdSize++;
}

temp[0].add() 有 cin,它工作正常。当我运行程序时,用户必须向数组中添加 2 只鸟。到达“else”下的部分时会出现问题,因此是数组的第二个元素。该程序肯定会达到“temp[birdSize+1].add();”在运行时,然后弹出“xyz.exe 已停止工作”窗口,并在详细信息中显示“故障模块名称:StackHash_7e8e”所以我确定内存分配有问题,但问题是当我尝试在 Debug模式下找到有问题的行,一切正常。

嗯,不是全部。该程序有一个 print() 函数,它打印出 Register 中的所有内容。数组的第二个元素与第一个元素相同。

我不知道该怎么办。看了很多论坛的帖子,看了cpp的书,看了网上的教程,都没有找到解决这个问题的办法。请帮忙。

最佳答案

数组索引从0开始。所以在 else 部分你正在写

 Bird* temp = new Bird[birdSize+1]; // size =birdSize +1;

因此有效的索引范围将是 0 -> birdSize不是 birdSize+1

问题是

temp[birdSize+1].add();

您正在使用 birdSize+1 索引。应该是

temp[birdSize].add();

您的代码中还有其他错误:

for (unsigned int i=0; i<=birdSize; i++) // should be i<birdSize
{
temp[i] = this->birds[i];
}

您的程序中还有其他错误代码:

Register::Register()
{
this->birds = new Bird[0]; // should be this->birds=NULL
this->birdSize = NULL; // should be this->birdSize = 0
}

显然,如果您的家庭作业不需要它,您不应该以这种方式使用array。对于可变大小的容器,使用 vector, list...Array 仅当大小固定时才是。

关于c++ - 类内的类数组 - 动态数组的问题 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593898/

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