2016-11-29 52 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

谢谢!问题解决了! –