如果我以下一种方式定义数组:
char** array=new char*[3];
我像这样初始化数组:
for(int i=0; i<3;i++){
array[i]=new char[5];
}
之后,我在做:
delete[] array;
删除期间会发生什么?
答案 0 :(得分:3)
这会导致内存泄漏:只释放array
的内存,但在程序关闭之前不会释放为单元格保留的内存。
您应该将每个new
与delete
匹配:
for(int i=0; i<3;i++){
delete[] array[i];
}
delete[] array;
如果从某个函数收到指针,则需要知道它的大小才能释放所有内存。
为了避免手动内存处理,您可以使用共享指针的向量(std::vector<std::shared_ptr<char>
),或者在这种特定情况下,使用字符串(std::vector<std::string>
)。