我有一个3x3 2D动态数组分配如下:
int** matrix = new int* [3];
matrix[0] = new int [3*3];
for (int i = 1; i < 3; ++i)
matrix[i] = matrix[i-1] + 3;
Run Code Online (Sandbox Code Playgroud)
我应该如何解除分配?它是否正确:
delete [] matrix;
delete [] matrix[0];
Run Code Online (Sandbox Code Playgroud)
或者我也应该删除matrix[1]
,[2]
你拥有它的方式,你应该:
delete [] matrix[0];
delete [] matrix;
Run Code Online (Sandbox Code Playgroud)
但这是分配动态2D阵列的非常规方式.通常,您分配一个指针数组,然后为每一行(列)分配一个实际类型的数组.
// 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;
Run Code Online (Sandbox Code Playgroud)
小智 6
代码:
delete [] matrix;
delete [] matrix[0];
Run Code Online (Sandbox Code Playgroud)
显然是错误的,因为你删除它后使用矩阵.
delete [] matrix[0];
delete [] matrix;
Run Code Online (Sandbox Code Playgroud)
是正确的,但我不能保证整个代码做一些合理的事情.
请注意,您不应删除矩阵[1]和矩阵[2],因为它们只是矩阵[0]的副本.根据经验,您应该在调用new时具有相同数量的删除调用.
归档时间: |
|
查看次数: |
6095 次 |
最近记录: |