C语言malloc函数为一维,二维,三维数组分配空间

c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区。可以根据需要,向系统申请所取空间的大小,因为没有在声明部分定义它们为变量或数组,所以不能通过变量名或数组的方式去引用这些数据,只能通过指针来引用。

对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数。

接下来写一下malloc函数如何实现为一维,二维,三维数组分配空间。

一;一维数组的申请与释放:

例如为一个字符数组分配空间:

1
char *p = (char *)malloc(m*sizeof(char));

释放空间:

1
free(p);

二:二维数组的申请与释放:

1:使用二级指针:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char **p = (char *)malloc(m*sizeof(char *));
 
for(i=0;i<m;i++)
 
{
 
      p[i]=(char *)malloc(n*sizeof(char *));
 
}
 
//释放空间:
 
for(i-0;i<m;i++)
 
{
 
    free(p[i]);
 
}
 
free(p);

2:使用数组指针的方式:

1
char (*p)[3] = (char(*)[3])malloc(sizeof((char)*m*n);

这种方式分配的内存只需要释放一次:  

1
free(p);

三:三维数组的申请与释放:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
char ***p=(char* **)malloc(m*sizeof(char**));
 
for(i=0;i<m:i++)
 
p[i]=(char **)malloc(n*sizeof(char*));
 
for(i=0;i<m;i++)
 
   for(j=0;j<n;j++)
 
     p[i][j]=(char *)malloc(p*sizeof(char));
 
//释放空间:
 
for(i=0;i<m;i++)
 
   for(j=0;j<n;j++)
 
    free(p[i][j]);
 
for(i=0;i<m:i++)
 
free(p[i]);
 
free(p);

 注意:可以看出分配空间与释放空间都是逐步进行的,但是释放空间的顺序与分配空间的顺序相反。 

  

 

  

  

posted @   轻轻的吻  阅读(4069)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示