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); |
注意:可以看出分配空间与释放空间都是逐步进行的,但是释放空间的顺序与分配空间的顺序相反。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)