gpt4 book ai didi

c++ - 创建动态分配的数组

转载 作者:行者123 更新时间:2023-11-30 01:56:37 27 4
gpt4 key购买 nike

我正在尝试创建一个动态分配的数组,当填充时,创建一个足够大的新数组来容纳所有内容并将所有值从旧数组复制到新数组。我在我的 append 函数中执行此操作,该函数在调用时会动态分配一个新数组,tmp 指向它,然后将值从 arr[i] 移动到 tmp[i]。但是,我想知道完成后是否需要删除 tmp?因为当我尝试在不删除 tmp 的情况下打印数组的内容时,它打印得很好,但是当我删除 tmp 时,事情开始变得奇怪,内容不再按应有的方式打印。这是我的代码:

ArrayList::ArrayList(int initsize): last(0), size(initsize), origsize(initsize)
{
arr = new int[size];
}

ArrayList::ArrayList()
{
last = 0;
size = 16;
origsize = 16;
arr = new int[size];
}

void ArrayList::append(int value)
{
if (last<size) {
arr[last] = value;
}

last++;

if (last == size) {

int* tmp = new int[size+origsize];
int i = 0;

for (i=0; i<(size+origsize); i++)
tmp[i] = arr[i];

size = size+origsize;
arr = tmp;
arr[last] = value;

//delete tmp;
}
}

最佳答案

你的 arr 现在是 tmp。我的意思是他们都指向一个新数组。你需要删除旧的。做

int* old = arr;
arr = tmp;
delete [] old;
arr[last] = value;

关于c++ - 创建动态分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583969/

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