以下代码片段是我尝试将数组大小增加两倍。我有几个问题。最重要的是,我应该在原始数组上调用delete吗?
void enlarge(int *array, int* dbl int size) {
for (int i = 0; i < size; i++)
dbl[i] = array[i];
delete array;
array = dbl;
}
答案 0 :(得分:6)
你有一些问题:
array
仅修改指针的本地副本。如果要通过调用代码观察修改,则需要使用引用指针。delete[]
分配的内容时,您需要使用new[]
。void enlarge(int *& array, int size) {
// ^
// Use a reference to a pointer.
int *dbl = new int[size*2];
for (int i = 0; i < size; i++) {
// ^
// Iterate up to size, not size*2.
dbl[i] = array[i];
}
delete[] array;
// ^
// Use delete[], not delete.
array = dbl;
}
但是,强烈建议您使用std::vector<int>
;它会根据需要自动调整大小,这对你来说是完全透明的。
答案 1 :(得分:1)
关键字double不能用作变量名,并且在将新分配分配给同一指针之前必须删除先前的数组,并且循环应该复制来自prev数组的项目的大小no(不是2 * size)
void enlarge(int **array, int size) {
int *d = new int[size*2];
for (int i = 0; i < size; i++)
d[i] = *array[i];
delete [] *array;
*array = d;
}
如果前一个数组是int * arr,而size是数组arr的currentize,则调用应为:enlarge(&arr, size)