C++的几种二维数组申请与释放操作

  最近需要写一个接口,函数每执行一次,需要存储448路的数据,执行第二次,仍然存储448路数据,麻烦的是,两次448路数据需要合为一个448路,这就要求,给一个二维数组,第一次直接存储,第二次,偏移一定的长度后再存储;

了解到三种方法可以实现:
1,new delete

int main()
{
	//1,new delete 4*3的矩阵
	int m = 4, n = 3;
	//申请
	int **array_new = new int *[4];
	for (int i = 0; i < 4; i++)
		array_new[i] = new int[3]();//加括号调用默认构造函数,初始化为0

	display(array_new, 4, 3);

	//释放
	for (int i = 0; i < 4; i++)
		delete array_new[i];
	delete array_new;


	return 0;
}

2,malloc,free

//2,malloc free 4*3的矩阵
	int m = 4, n = 3;
	//申请
	int **array_new = (int**)malloc(sizeof(int*) * 4);
	for (int i = 0; i < 4; i++)
	{
		array_new[i] = (int*)malloc(sizeof(int) * 3);
		memset(array_new[i], 0, sizeof(int) * 3);
	}

	display(array_new, 4, 3);

	//释放
	for (int i = 0; i < 4; i++)
		free (array_new[i]);
	free (array_new);

	return 0;

这里如果想把初始值用memset设为1的话,应该如何做呢?
在这里插入图片描述
直接把memset里的value改为1,打印输出的结果是16843009;很奇怪,但是转为二进制就明白原因了
在这里插入图片描述
原来memset是一个字节一个直接的设置初始值
在这里插入图片描述
一个字节8bit ,所以1对应0000 0001;
一个int,4个字节,所以就是:
0000 0001 0000 0001 0000 0001 0000 0001
也就是十进制的16843009

3,vector

//3,vector
	//申请
	vector<vector<int>> arrat_vector(4, vector<int>(3, 1));
	//打印
	for (int i = 0; i != arrat_vector.size(); i++)
	{
		for (int j = 0; j != arrat_vector[0].size(); j++) {
			cout << arrat_vector[i][j] << " ";
		}
		cout << endl;
	}
	//释放,vector会自动释放,只要不是用malloc和new定义的vector,都不用手动释放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值