我一直试图解除分配这些char指针数组,但我不确定如何完全解除分配。
以下是代码:
char* words[4];
words[0] = new char[8];
words[1] = new char[6];
words[2] = new char[10];
words[3] = new char[16];
和继承人我试过的
for (int i=0;i<4;i++)
{
delete [] words[i];// this works
}
delete [] words;//this gives an error, not sure why it doesn't work.
有人可以解释为什么这不正确以及如何解决它 提前谢谢。
答案 0 :(得分:7)
只有delete
你new
的内容。你没有new words
,所以不要删除它。据推测,此代码位于函数内部,在这种情况下words
具有自动存储持续时间,并且当它超出范围时将自动销毁。
此外,不要new
任何你不需要的东西,以免你自己正确删除它的麻烦(这可能会非常困难)。如果需要动态数组,请使用std::vector
;如果需要动态字符串,请使用std::string
。
答案 1 :(得分:4)
这是不正确的,因为words
本身不像它包含的指针一样动态分配。
words
在堆栈上,words[i]
在堆上。作为一般原则,每个delete[]
需要new[]
。您有4 new
,需要4 delete
。
char *words[4] // on stack, doesn't need deallocation
char **words = new char*[4]; // on heap, would need deallocation too