在这种情况下,删除指针数组期间会发生什么?
What happens during delete of array of pointers in this case?
如果我用下一种方式定义数组:
char** array=new char*[3];
然后我像这样初始化数组:
for(int i=0; i<3;i++){
array[i]=new char[5];
}
之后,我做了:
delete[] array;
删除过程中会发生什么?
这会导致内存泄漏:只有 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>
)。
如果我用下一种方式定义数组:
char** array=new char*[3];
然后我像这样初始化数组:
for(int i=0; i<3;i++){
array[i]=new char[5];
}
之后,我做了:
delete[] array;
删除过程中会发生什么?
这会导致内存泄漏:只有 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>
)。