[英]Deleting dynamically allocated array
我是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的指針,所以應該刪除arr1作為數組嗎? 該代碼沒有多大意義,但作為示例很好。 我知道有很多類似的問題,但是我找不到確切的答案。
如果使用new <type>[n]
進行分配,則必須使用delete []
進行釋放。
確定正確的delete
形式時,最重要的是分配中使用的new
形式。
在main
功能中,您會泄漏內存。 您可以通過調用new
初始化arr1
,然后立即使用f()
調用返回的新指針覆蓋該值。 從main
調用new
完全是錯誤的,應該刪除。 像這樣簡單地寫:
int* arr1 = f(n);
而你的main
應該是
int main()
寫
int* arr1 = f(n);
然后
delete[] arr1;
數組對象在f()
分配,而delete
刪除它。 指針本身不能刪除,只能刪除它指向的對象(數組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.