[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;
}

  

 

posted on 2019-10-12 13:36  晨曦磐石  阅读(675)  评论(0)    收藏  举报

导航