C语言中多维数组的内存分配和释放(malloc与free)的方法

2016-02-19 09:06 38 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享C语言中多维数组的内存分配和释放(malloc与free)的方法吧。

【 tulaoshi.com - 编程语言 】

如果要给二维数组(m*n)分配空间,代码可以写成下面:
代码如下:

char **a, i;

// 先分配m个指针单元,注意是指针单元

// 所以每个单元的大小是sizeof(char *)

a = (char **) malloc(m * sizeof(char * ));

// 再分配n个字符单元,

// 上面的m个指针单元指向这n个字符单元首地址

for(i = 0; i m; i++)

a[i] = (char * )malloc(n * sizeof(char ));

释放应该是:
代码如下:

int i;

for(i=0;im;i++)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

    free((void *)a[i]);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

free((void *)a);

如果为三维数组(m*n*p)分配空间呢,应该是:
代码如下:

char ***a, i, j;

a = (char ***) malloc(m * sizeof(char ** ));

for(i = 0; i m; ++i)

    a[i] = (char **) malloc(n * sizeof(char * ));

for(i = 0; i m; ++i)

for(j = 0; j n; ++j)

    a[i][j] = (char * )malloc(p * sizeof(char ));

释放代码为逆过程,具体代码为:
代码如下:

int i,j,;

for(i = 0; i m; ++i)

for(j = 0; j n; ++j)

        free((void *)a[i][j]);  

for(i = 0; i m; ++i)

    free((void *)a[i]);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

free((void *)a);


三维以上的多维数组的分配和释放,原理与上面的一样。

来源:https://www.tulaoshi.com/n/20160219/1589580.html

延伸阅读
代码如下: #include stdio.h /*---------           #define    string    char *            ----*/ typedef   char *   string;       in...
相信很多人都看过设计模式方面的书,大家有什么体会呢?Bridge,Proxy,Factory这些设计模式都是基于抽象类的。使用抽象对象是这里的一个核心。        !-- frame contents -- !-- /frame contents -- 其实我觉得框架化编程的一个核心问题是抽象,用抽象的对象构建程序的主体框架,这...
C语言中对时间和日期的处理 原著:Chuck Allison 翻译:孟谨 原文出处:Code Capsules:Time and Date Processing in C Chuck Allison 是盐湖城圣 Latter Day 教堂总部下耶稣教堂家族历史研究处的软件体系设计师。他拥有数学学士和数学硕士学位。他从1975年...
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型...
/*程序作者:管宁 站点:www.cndev-lab.com 所有稿件均有版权,如要转载,请务必闻名出处和作者*/ #include stdio.h main() { void search_score(); /* 定义自定义涵数类型为不返回型 */ void count_avg(); /* 定义自定义涵数类型为不返回型 */ static float a[3][4]={{97,45.5,66,77},{88,92.5...

经验教程

277

收藏

83
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部