c中可以用delete釋放陣列的空間嗎

時間 2021-06-25 14:43:59

1樓:匿名使用者

這樣定義陣列的話是在棧上分配記憶體,超過作用域範圍的時候會自動釋放掉,使用new操作符分配的記憶體,是在堆上,需要使用delete釋放,因此如果像你那樣定義陣列的話,不必釋放記憶體

2樓:

用delete釋放的只能是用new動態分配的陣列空間,若陣列不是動態分配的則不能用delete釋放。

舉兩個例子詳細說明一下:

int a[100];

這個陣列a是不能用delete釋放空間的,因為這個陣列a在宣告時就已經說明了空間的大小,在最後程式會自動釋放這個空間。

int *b;

b=new int[100];

這個要在最後用delete b; 語句來動態釋放,因為陣列b是一個動態陣列,陣列空間是動態分配的,程式是不能自動釋放的,所以要自己用delete來釋放。

3樓:

不行運算子delete必須用於先前new分配的有效指標,如果用delete釋放的記憶體空間不是用new申請的,可能會引起程式執行錯誤。

char aa[100];

這樣定義的,不用手動釋放記憶體空間 。

如果是char *aa;

aa=new char[100];..

..delete aa;

4樓:皇家救星

只有通過new申請的記憶體塊才需要用delete釋放如char *p = new char[10];

要用delete p;釋放

而其它的不用(如lz舉的例子 char aa[100])

5樓:匿名使用者

可以的。

如果這個資料是在堆上分配的記憶體可以用 delete來釋放delete aa;

這樣就可以了。

6樓:

這樣定義的,不需要手動釋放,也不可以手動釋放,會出錯如果是這樣的才可以

char *aa;

aa=new char[100];

//...

delete aa;

在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下

7樓:匿名使用者

c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。

樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。

關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。

對於 (1),上面提供的程式已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。

#include ;

using namespace std;

class t

~t()

};int main()

大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。

從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了解構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的解構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的解構函式。

基本型別的物件沒有解構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。

所以一個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用

8樓:匿名使用者

如果new得是一個變數,那麼使用delete就可以。

但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。

使用new申請的陣列應該使用delete來銷燬它。

9樓:匿名使用者

delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass;

10樓:匿名使用者

delete 是銷燬一個變數!delete 是銷燬一個變數陣列