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

寻Q757856333谜

寻Q757856333谜

2016-02-19 09:06

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

如果要给二维数组(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++)

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

free((void *)a);

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

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

char ***a, i, j;

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

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

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]);

free((void *)a);

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


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

展开更多 50%)
分享

猜你喜欢

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

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

解析C语言中位字段内存分配的问题

编程语言 网络编程
解析C语言中位字段内存分配的问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

C语言中全局数组和局部数组的问题

编程语言 网络编程
C语言中全局数组和局部数组的问题

如何简化临时内存的分配与释放

编程语言 网络编程
如何简化临时内存的分配与释放

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

基于Java 数组内存分配的相关问题

编程语言 网络编程
基于Java 数组内存分配的相关问题

链表的C语言实现之动态内存分配

编程语言 网络编程
链表的C语言实现之动态内存分配

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

解析取模运算% 和位与运算& 之间的关系详解

解析取模运算% 和位与运算& 之间的关系详解

限定Excel工作表可用编辑范围的几种方法

限定Excel工作表可用编辑范围的几种方法
下拉加载更多内容 ↓