簡體   English   中英

刪除動態分配的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM