C++ new与delete——二维数组的创建释放

  • Post author:
  • Post category:其他



二维数组的创建


方法①:直接申请一块空间

#include <iostream>
using namespace std;

int main()
{
	//申请空间
	int(*p)[4] = nullptr;
	p = new int[3][4];	//直接申请一块3*4个字节的堆空间,用于存放数组元素,并将其起始地址赋给数组指针p。
	//赋值
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 4; j++) {
			p[i][j] = (i + 1) * (j + 1);
			//*(*(p + i) + j) = (i + 1) * (j + 1);
		}
	//打印
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++)
			cout << p[i][j] << ' ';
		cout << endl;
	}
	//释放空间
	delete []p;
}

运行结果

1 2 3 4
2 4 6 8
3 6 9 12

内存排布

方法②

#include <iostream>
using namespace std;

int main()
{
	//申请空间
	int** pp = nullptr;
	pp = new int*[3];			//先申请一块4*3(3代表数组第一维的长度)个字节的堆空间,用于存放二维数组中每单行数组的起始地址,并将这一块用于存放地址的堆空间的首地址赋给二级指针pp。
	for (int i = 0; i < 3; i++)
		pp[i] = new int[4];		//通过3(数组第一维的长度)次循环,每次申请4*4(数组的第二维的长度)个字节的空间,并将其地址存放至刚刚申请的指针数组中。
		//*(pp + i) = new int[4];
	//赋值
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 4; j++) {
			pp[i][j] = (i + 1) * (j + 1);
			//*(*(pp + i) + j) = (i + 1) * (j + 1);
		}
	//打印
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++)
			cout << pp[i][j] << ' ';
		cout << endl;
	}
	//释放空间
	for (int i = 0; i < 3; i++)
		delete[]pp[i];
	delete[]pp;

为方便理解,二级指针pp如下所示:



版权声明:本文为weixin_46085113原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。