2013-02-27 71 views
0

聲明被釋放:記憶新的INT [10]必須刪除[]

內存與分配的新的INT [10]必須刪除[]被釋放。

所以..

new int[10]; 

那我怎麼刪除呢?

編輯: 謝謝你們:) 我認爲威爾遜,保羅,蒂姆等是正確的,該語句因此省略一些話讓我感到困惑 - -...它只是

int * p = new int[10]; 

delete [] p; 

我已經從來沒有見過Rob的回答,看起來對我來說真的很新鮮!任何的解釋可以理解的:)

delete[] new int[10]; 
+0

不能刪除它,因爲你沒有句柄。 – juanchopanza 2013-02-27 20:56:11

+6

要保持相同的樣式,'delete [] new int [10];' – 2013-02-27 20:57:48

+0

您應該使用'std :: vector '。我不記得我上次在代碼中編寫'delete'或'delete []'的時候。 – Naszta 2013-02-27 20:58:21

回答

6

你缺少一個變量來保存從新返回的值。你應該有這樣的事情:

int* intArray = new int[10]; 

後來,當你要刪除的記憶,你引用它通過變量:

delete[] intArray; 
1

就像它說:

int *foo = new int[10]; 
delete[] foo; 
+0

如果我不會刪除任何內存和程序退出。那麼可能會有風險? (意思是我們只需要在運行時刪除內存?) – UnKnown 2015-08-02 20:34:52

1
int * p = new int[10]; // allocate p 

// do stuff with p 

delete [] p;   // release p when you're done 
+0

如果我不會刪除任何內存和程序退出。那麼可能會有風險?有人告訴我,如果我們不會釋放內存和程序退出,那麼內存將無法使用,直到操作系統重新安裝。 – UnKnown 2015-08-02 20:35:28

+0

大多數現代操作系統都會清理程序退出時剩餘的內存分配,但無論如何,釋放所有動態分配是一個不錯的主意 - 它可以更容易地找到內存泄漏,如果程序重新構建,它可能變得非常重要。 – 2015-08-02 21:47:02

+0

確實刪除了真的清除/清理內存? – UnKnown 2015-08-02 22:46:10