利用malloc函数分配二维数组

        利用malloc()函数分配的内存是连续的的,我们可以先分配二维数组的行(即行指针),然后利用分配的行指针,再分配列指针。咱们以分配一个4x5的二维数组为例,如下图():

1、先分配连续的4块内存作为行,这些分配内存是连续的,并将S指向它

	S = (char**)malloc(sizeof(char*) * row);

 2、利用之前分配好的4块内存,每块内存(即对应的行)再分配5块内存作为列,每行指向对应分配好的5块内存(相当列)

for (i = 0; i < row; i++)
		S[i] = (char*)malloc(sizeof(char) * col);

注:每一行分配的内存是连续,但相邻两行的内存不一定连续(由于每次用malloc()给一行分配内存(这行内存分配的内存是连续的),下一次给下一行分配内存,不一定紧接着上一行最后的内存的地址,故相邻两行的内存不一定连续,即整体不连续)

3、测试程序

/*获取的二维数组,只有一行一行是连续的,但整体不是连续的*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char** S;
	int row, col, i, j;
	printf("请输入你需要创建的二维数组的行和列!!!\n");
	printf("请输入行:");
	scanf("%d", &row);
	printf("请输入列:");
	scanf("%d", &col);
	/*利用malloc申请内存*/
	S = (char**)malloc(sizeof(char*) * row); // 分配行
	for (i = 0; i < row; i++)
		S[i] = (char*)malloc(sizeof(char) * col); // 分配列
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
			printf("%p	", &S[i][j]);
		printf("\n");
	}
	/*利用malloc()函数分配的内存在程序退出时,不要忘了利用free()函数释放
	要不容易造成内存泄漏*/
	/*释放申请的内存*/
	for (i = 0; i < row; i++) // 先释放分配的列
		free(S[i]);
	free(S);				  // 再释放分配的行
	return 0;
}

 程序输出:

         由程序输出可以得出,每一行是连续的,但相邻行却不是连续的,符合上面的解释。

总结:利用这种方法分配的内存只要一行一行是连续的,但整体不会像声明的二维数组那样整体连续。

  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值