1
這裏修改後的代碼是在C數組的釋放器++指針
int *p = new int[10];
...
delete[] p;
程序如何知道有多少元素在那裏當刪除[]被稱爲?
假設我們插入之間以下代碼:
p++;
會將程序試圖釋放一個多元素?它會停在第10個元素嗎?
這裏修改後的代碼是在C數組的釋放器++指針
int *p = new int[10];
...
delete[] p;
程序如何知道有多少元素在那裏當刪除[]被稱爲?
假設我們插入之間以下代碼:
p++;
會將程序試圖釋放一個多元素?它會停在第10個元素嗎?
分配器保持一個分配多少內存的軌道。這通常存儲在您正在分配的內存之前的「頭部」段中。執行delete []時,解除分配器確切知道要釋放多少內存。
如果修改指針,則會產生未定義的行爲。
您將會有未定義的行爲,因爲'p'不再是'new []'返回的指針。這將是*糟糕*。 – 2015-02-24 00:37:39
它的實現已定義,但通常是一個祕密整數存儲在內存中的數組之前,其中包含它的大小。 – 2015-02-24 00:38:57
和*兩個*問題密切相關,[如何刪除[]'知道它是一個數組](http://stackoverflow.com/questions/703691/how-does-delete-know-its-an-array) 。 – WhozCraig 2015-02-24 00:46:52