Deallocate Char Pointer

时间:2015-01-29 00:42:18

标签: c++

我一直试图解除分配这些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.

有人可以解释为什么这不正确以及如何解决它 提前谢谢。

2 个答案:

答案 0 :(得分:7)

只有deletenew的内容。你没有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