[C++] 关于动态创建[new]三维数组释放[delete]不完全的疑问记录
C++中使用动态创建三维数组和释放内存的代码
void arr3dTest()
{
int ***array3D;
//假定数组第一维为m, 第二维为n, 第三维为h
int m = 10;
int n = 100;
int h = 10000;
int i;
int j;
//动态分配空间
array3D = new int **[m];
for (i = 0; i < m; i++)
{
array3D[i] = new int *[n];
for (j = 0; j < n; j++)
{
array3D[i][j] = new int[h];
}
}
//释放,实测释放后仍有100K+的内存未释放
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
delete[]array3D[i][j];
array3D[i][j] = NULL;
}
delete[] array3D[i];
array3D[i] = NULL;
}
delete[]array3D;
array3D = NULL;
}
如果创建后马上释放,则不会有部分未释放的内存,但这对于实际应用来说没什么用.
void arr3dTest()
{
int ***array3D;
//假定数组第一维为m, 第二维为n, 第三维为h
int m = 10;
int n = 100;
int h = 10000;
int i;
int j;
//动态分配,释放空间
array3D = new int **[m];
for (i = 0; i < m; i++)
{
array3D[i] = new int *[n];
for (j = 0; j < n; j++)
{
array3D[i][j] = new int[h];
delete[]array3D[i][j];
}
delete[] array3D[i];
}
delete[]array3D;
array3D = NULL;
}
浙公网安备 33010602011771号