二维数组动态分配内存

方法一:

// 分配内存
int **arr = (int **)malloc(row * sizeof(int *));
for(int i = 0; i < row; ++i)
{
	arr[i] = (int *)malloc(col * sizeof(int));
}
// 释放内存
for(int i = 0; i < row; ++i)
{
	free(arr[i]);
}
free(arr);

说明:可以用arr[i][j]的方式来访问数组元素;但是,需要分配额外的内存来存储行指针,且分配的内存是不连续的,分配和释放时需要多次调用malloc和free函数。


方法二:

// 分配内存
int *arr = (int *)malloc(row * col * sizeof(int));
// 释放内存
free(arr);
说明:分配的内存是连续的,访问方式用*(arr + i * row + j)。


方法三:

// 分配内存
int **arr = (int **)malloc(row * sizeof(int *) + row * col * sizeof(int));
if(NULL != arr)
{
	int *head = (int *)arr + row * sizeof(int *);
	memset(arr, 0, row * sizeof(int *) + row * col * sizeof(int));
	while(--row)
	{
		arr[row] = head + row * col * sizeof(int);
	}
}
// 释放内存
if(NULL != arr)
{
	free(arr);
}
说明:可以用arr[i][j]的方式来访问数组元素,需要分配额外的内存来存储行指针,但是,分配的内存是连续的。是最值得推荐的方法!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值