释放内存:A**mat=新A*[2];

free the memory of: A** mat = new A*[2];

本文关键字:mat 内存 释放      更新时间:2023-10-16

我定义了:

A** mat = new A*[2];

但是我怎样才能删除它呢?使用delete[] mat;还是delete[] *mat;

只有当您不进行额外分配时,它才是delete[] mat;。但是,如果您在数组中分配了数组,则还需要删除它们:

A** mat = new A*[2];
for (int i = 0 ; i != 2 ; i++) {
    mat[i] = new A[5*(i+3)];
}
...
for (int i = 0 ; i != 2 ; i++) {
    delete[] mat[i];
}
delete[] mat;

第一个,删除[]mat

第二个将删除数组中第一个元素所指向的内容(如果这真的是你所有的代码,那就没什么了(,这相当于删除[]mat[0]

此外,如果数组中的指针最终指向您也希望释放的已分配内存,则必须手动删除每个元素。例如:

A** mat = new A*[2];
mat[0] = new A;
mat[1] = new A[3];

那么你需要做:

delete mat[0];
delete[] mat[1];
delete[] mat;