释放记忆:A ** mat = new A * [2];

时间:2013-05-29 01:33:14

标签: c++ pointers delete-operator

我定义了:

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

但我怎么能删除呢?使用delete[] mat;delete[] *mat;

2 个答案:

答案 0 :(得分:7)

仅当您不进行其他分配时才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;

答案 1 :(得分:2)

第一个,删除[] mat

第二个会删除数组中第一个元素所指向的内容(如果真的是你所拥有的所有代码就没有了)它等同于delete [] mat [0]

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

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

然后你需要这样做:

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