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

What happens during delete of array of pointers in this case?

本文关键字:什么 这种情况下 删除 指针 数组      更新时间:2023-10-16

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

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

之后,我做:

delete[] array;  

删除期间会发生什么?

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

您应该将每个newdelete匹配:

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

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

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