0

我在这里搜索了很多主题,但他们似乎没有准确回答我。

我正在尝试在 C++ 中做一些动态重新分配 od 数组。我不能使用 STL 库中的任何东西,因为我需要在明确禁止 STL(向量,...)的作业中使用它。

到目前为止,我试图用这样的代码来详细说明:

int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];

delete [] items;   //is this necessary to delete?
items = new int [10];
for (int i = 0; i < 10; i++) items[i] = temp[i];
delete [] temp;

这似乎可行,但困扰我的是迭代次数过多。这不能更聪明地完成吗?显然,我正在使用比这更大的数组。不幸的是,我必须使用数组。

编辑:当我尝试做items = temp;而不是

for (int i = 0; i < 10; i++) items[i] = temp[i];并尝试std::cout我所有的元素,我最终失去了前两个元素,但valgrind正确打印了它们。

4

2 回答 2

5

是的,第一个delete[]是必要的。没有它,您将泄漏内存。

至于后面的代码 first delete[],都可以替换为:

items = temp;

这将items指向您刚刚填充的十元素数组:

int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];
delete [] items;   //delete the original array before overwriting the pointer
items = temp;

delete[] items;最后,当你完成数组时不要忘记。

于 2013-03-27T11:28:43.047 回答
0

的容器STL是为了减轻这样的工作而设计的。这很乏味,但是当您需要使用C-arrays 时,没有太多选择。

的删除

delete [] items; 

是必要的,就像当您放弃对数组的引用时,您可以通过在

items = new int [10];

会导致内存泄漏,所以这是必要的。

于 2013-03-27T11:30:28.467 回答