删除动态分配的数组

时间:2014-03-23 21:38:02

标签: c++ arrays pointers delete-operator

我是C ++的初学者,我有一个疑问。如果我有这样的代码:

int* f(int n){               //global

int* arr = new int[n];
for(int i=0;i<n;i++)
arr[i]=i;

return arr;
}

void main() {

int n;
scanf("%d",&n);


int* arr1 = new int;  //or should I write just int* arr1; ?
arr1 = f(n);

delete [] arr1;  // or just delete arr1;
}

问题是我应该将arr1作为数组删除,因为我将其声明为指向int的指针? 代码没有多大意义,但它作为一个例子很好。我知道有很多类似的问题,但我找不到我的问题的确切答案。

2 个答案:

答案 0 :(得分:2)

如果使用new <type>[n]进行分配,则必须使用delete []进行重新分配。

确定delete的正确形式时,所有这些都是在分配中使用的new形式。

main功能中,您会泄漏内存。您通过调用arr1初始化new,然后立即使用调用f()返回的新指针覆盖该值。来自new的{​​{1}}来电是完全错误的,应该删除。写它就像这样:

main

您的int* arr1 = f(n); 应该是

main

答案 1 :(得分:1)

int* arr1 = f(n);

以后

delete[] arr1;

数组对象在f()中分配,delete删除它。指针本身不能删除,只能删除指向的对象(数组)。