我在这里搜索了很多主题,但他们似乎并没有完全回答我。
我正在尝试用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 正确打印它们。< / p>
答案 0 :(得分:5)
是的,第一个delete[]
是必要的。没有它,你就会泄露记忆。
关于第一个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;
。
答案 1 :(得分:0)
STL
的容器是为了方便这样的工作而制作的。这很乏味,但是当你需要使用C
- 数组时,没有多少选择。
删除
delete [] items;
是必要的,就像你放弃对数组的引用一样,你可以在
中分配新的引用items = new int [10];
会导致内存泄漏,所以这是必要的。