我是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的指针? 代码没有多大意义,但它作为一个例子很好。我知道有很多类似的问题,但我找不到我的问题的确切答案。
答案 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
删除它。指针本身不能删除,只能删除指向的对象(数组)。