2015-02-24 67 views
1

這裏修改後的代碼是在C數組的釋放器++指針

int *p = new int[10]; 
... 
delete[] p; 

程序如何知道有多少元素在那裏當刪除[]被稱爲?

假設我們插入之間以下代碼:

p++; 

會將程序試圖釋放一個多元素?它會停在第10個元素嗎?

+8

您將會有未定義的行爲,因爲'p'不再是'new []'返回的指針。這將是*糟糕*。 – 2015-02-24 00:37:39

+5

它的實現已定義,但通常是一個祕密整數存儲在內存中的數組之前,其中包含它的大小。 – 2015-02-24 00:38:57

+0

和*兩個*問題密切相關,[如何刪除[]'知道它是一個數組](http://stackoverflow.com/questions/703691/how-does-delete-know-its-an-array) 。 – WhozCraig 2015-02-24 00:46:52

回答

2

分配器保持一個分配多少內存的軌道。這通常存儲在您正在分配的內存之前的「頭部」段中。執行delete []時,解除分配器確切知道要釋放多少內存。

如果修改指針,則會產生未定義的行爲。