在这种情况下删除指针数组时会发生什么?

时间:2018-06-05 10:11:31

标签: c++ arrays c++11 delete-operator

如果我以下一种方式定义数组:
char** array=new char*[3];
我像这样初始化数组:

for(int i=0; i<3;i++){  
array[i]=new char[5];  
}  

之后,我在做:

delete[] array;  

删除期间会发生什么?

1 个答案:

答案 0 :(得分:3)

这会导致内存泄漏:只释放array的内存,但在程序关闭之前不会释放为单元格保留的内存。

您应该将每个newdelete匹配:

for(int i=0; i<3;i++){  
    delete[] array[i];  
}  
delete[] array;  

如果从某个函数收到指针,则需要知道它的大小才能释放所有内存。

为了避免手动内存处理,您可以使用共享指针的向量(std::vector<std::shared_ptr<char>),或者在这种特定情况下,使用字符串(std::vector<std::string>)。