2013-07-04 50 views
-1

我有以下情況。刪除vs刪除[]

int *arrayP=new int[4]; 
arrayP[0]=0;arrayP[1]=1;arrayP[2]=2;arrayP[3]=3; 
int *temp; 
cout<<arrayP[0]<<endl; 
temp=arrayP; 
++arrayP; 
cout<<arrayP[0]; 
cout<<arrayP[1]; 
delete temp; 
cout<<arrayP[0]; 

輸出

0 
1 
2 
-1212222 

爲什麼會這樣呢? arrayP指向大小爲4的數組上的第一個元素。 因此,temp也指向第一個元素 現在爲什麼刪除temp即第一個元素也會刪除整個整數數組.arrayP將存儲數組中下一個元素的地址(因爲arrayP [0]顯示的是垃圾值)。

如果是這樣的話(即刪除temp將刪除整個整數數組)區別刪除[]和刪除。

+3

現在爲什麼要在那裏刪除溫度,即第一個電阻。你不能使用'delete',你沒有用'new'分配的東西。如果您使用'new []',則必須使用'delete []'。一旦你違反了這條規則,一切都停止了。也就是說,爲什麼會有人使用'new []':| –

+0

好的。假設我的代碼不再需要數組的第一個元素,那麼就沒有辦法釋放這個空間了(我想避免將它複製到一個更短的數組中,因爲它是一個佔用時間的工作,很明顯是鏈接列表) – user2511713

+0

如果它不需要數組的第一個元素,但需要其他元素,那麼就不要引用它;你真的在乎嗎? – Bathsheba

回答

8

如果您使用new[]您必須在delete[]之間平衡。

如果您使用new,您必須將其與delete平衡。

混合它們會導致內存泄漏/程序崩潰(技術上未定義的行爲)。 (在你的例子中,C++在內部錄製你創建的4 int;調用delete[]允許C++訪問這個記錄,調用delete不會)。