2013-03-01 72 views
-2

下面的代碼會發生什麼?如果給出一個指向數組中間的指針,delete []會做什麼?

int *p1 = new int[100]; 
    int *p2 = &p1[50]; 
    delete [] p2; 

聽說新店的一些實現數組的大小(-1)個數組索引,但後來就不事情可怕的錯誤在上面?

+5

未定義行爲免費內存! – mythagel 2013-03-01 02:28:36

+2

這個副本很容易找到......如果您可以在發佈問題之前進行一些研究,那將會很棒。 – jogojapan 2013-03-01 02:29:45

回答

1

事情肯定會出錯!

刪除[]操作者被定義爲僅工作於適當陣列的指針。正確的我的意思是它必須接收一個指針,該指針以前已初始化爲指向內存中的位置,其中的數組是使用新的運算符創建的。

你也不應該混用new/delete和malloc/free。作爲一個規則始終刪除已分配與new內存和已分配與malloc(及其衍生物)