2016-11-29 102 views
1

對於我提前糟糕的英語感到抱歉。 我正在使用VS2013。 我正在製作動態數組,這是我的代碼。關於分配2維數組

char ** files = new char*[4]; 
cout << files << endl; 
files[0] = new char[4 * 50]; 
cout << files[0][0] << endl; 

for (int i = 1; i < 4; i++) 
{ 
    files[i] = files[i - 1] + 50; 
} 

我想如果我將4和4 * 50更改爲變量。我可以製作動態數組。呃..我的意思是動態分配。但這是問題。

//do something... 
delete files[0]; 
delete files; 

此代碼發生錯誤。可能我刪除了兩次。 (塊類型是有效的pHead-> nBlockUse) 但是,在我看來,首先,我必須刪除文件[0] 刪除字符數組,然後我必須通過刪除文件刪除字符指針數組。 但強大的編譯器說我做錯了。 幫幫我!〜

+0

,你能否告訴我們錯誤信息? – 2016-11-29 15:49:37

+0

(塊類型是有效的pHead-> nBlockUse)這是錯誤消息 –

+0

表達式:_CrtlsValidHeapPointer(puserData) –

回答

0

實際上,你不使用正確的C++基元來刪除一個數組。

如果分配,用新的單個對象,可以使用刪除釋放它:

char *p = new char; 
... 
delete p; 

當您分配新的T []對象的數組,就必須使用刪除[]以解除分配數組:

char *p = new char[N]; 
... 
delete[] p; 

因此,在你的榜樣,你應該做的:

delete[] (files[0]); 
delete[] files; 
+0

謝謝!問題解決了! –