我有一个分配如下的 3x3 二维动态数组:
int** matrix = new int* [3];
matrix[0] = new int [3*3];
for (int i = 1; i < 3; ++i)
matrix[i] = matrix[i-1] + 3;
我应该如何释放它?这是正确的吗:
delete [] matrix;
delete [] matrix[0];
或者我还应该删除 matrix[1]
, [2]
最佳答案
按照你的方式,你应该:
delete [] matrix[0];
delete [] matrix;
但这是一种非常非常规的分配动态二维数组的方式。通常,您分配一个指针数组,然后为每一行(列)分配一个实际类型的数组。
// allocate
int **matrix = new int*[3];
for(int i = 0; i < 3; ++i)
matrix[i] = new int[3];
// deallocate
for(int i = 0; i < 3; ++i)
delete [] matrix[i];
delete [] matrix;
关于c++ - 这个重新分配是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/983244/