下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 1:深刻理解多维数组的概念,多维数组在内存中的分配情况,基本上动态分配也没什么问题的。然后还要注意一点的就是,释放是分配的逆过程!!!

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

int i ;

char (*p)[12] ; //[5][12]

p = malloc(5 * sizeof(char ) * 12);     //申请5行的地址空间

for(i = 0 ; i < 5 ; i++)

{

strcpy(*(p + i), "hello");

}

for(i = 0 ; i < 5 ;i++)

{

printf("%s\n" , *(p + i));

}

free(p);

}

程序2:

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

int i;

int j ;

int num = 0 ;

char **p ;//[5][12]

p =(char **) malloc( 5 * sizeof(char *) );

for(i = 0 ; i < 5 ; i++)

{

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

}

for(j = 0 ; j < 5 ; j++)

{

num = 0 ;

for(i = 0 ; i < 12 ; i++)

{

p[j][i] = 'a' + num;

num++ ;

}

}

for(j = 0 ; j < 5 ; j++)

{

for(i = 0 ; i < 12 ; i++)

{

printf("%c" , p[j][i]);

}

printf("\n");

}

for(i = 0 ; i < 5 ; i++)

{

free(p[i]);

}

free(p);

}

程序3:

#include <stdio.h>

#include <malloc.h>

#include <string.h>

void main(void)

{

char ***pStr;

int i , j , k ;

// 自己分配一个三维的[3][4][5]

pStr = (char ***)malloc(3 * sizeof(char **));      //第一维

//分配二维的

for(i = 0 ; i < 3 ; i++)

{

*(pStr + i) = malloc(4 * sizeof(char *));

}

//分配三维

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ; j++)

{

*(*(pStr + i) + j) = malloc(5 * sizeof(char));

}

}

//使用分配的内存

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ; j++)

{

for(k = 0 ; k < 5 ; k++)

{

pStr[i][j][k] = 'a' ;

printf("%c" , pStr[i][j][k]);

}

printf("\n");

}

}

//释放第三维的内存

for(i = 0 ; i < 3 ; i++)

{

for(j = 0 ; j < 4 ;j++)

{

free((pStr[i][j]));

}

}

//释放第二维的内存

for(i = 0 ; i < 3 ; i++)

{

free(pStr[i]);

}

//释放第一维的内存

free(pStr);

}

malloc动态分配多维数组的更多相关文章

  1. C语言如何动态分配二维数组

    C语言如何动态分配二维数组(转载) 原文链接:https://www.cnblogs.com/0xWitch/p/9314621.html 使用malloc().free()函数进行动态分配,这两个函 ...

  2. c++ 动态分配二维数组 new 二维数组

    #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...

  3. C与C++动态分配二维数组

    C: C中使用函数malloc和free两个函数. //动态分配M*N维 int **a=(int **)malloc(sizeof(int*)*M); ;i<M;i++) a[i]=(int ...

  4. 对数组进行malloc动态分配的一些总结

    笔者在处理程序奔溃问题的时候,遇到栈溢出的情况,栈溢出最常见的情况是:迭代调用和数组过大.数组占用占空间,所以改为了malloc方式放在堆上.想想,就想整理一下关于对多维数组的动态分配问题. 一,堆和 ...

  5. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  6. c 二维数组动态分配和释放

    c动态语言 函数声明的头文件在<stdlib.h>里 使用malloc函数为字符串分配内存 -->记得释放内存 free() #include <stdio.h> #in ...

  7. 如何在C++中动态建立二维数组(转)

    http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...

  8. C语言中二维数组如何申请动态分配内存

    C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc. ...

  9. c中使用malloc动态申请二维数组

    前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...

随机推荐

  1. Linux下基于LVM调整分区容量大小的方法

    Linux下调整分区容量大小的方法(适用于centos6-7) 说明:以下方法均使用centos6.9和centos7.4进行测试. Centos6分区容量调整方法 1.web分区空间不足,新添加一块 ...

  2. 纯 CSS 创作一个小球绕着圆环盘旋的动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 ...

  3. python爬虫入门四:BeautifulSoup库(转)

    正则表达式可以从html代码中提取我们想要的数据信息,它比较繁琐复杂,编写的时候效率不高,但我们又最好是能够学会使用正则表达式. 我在网络上发现了一篇关于写得很好的教程,如果需要使用正则表达式的话,参 ...

  4. (原)iOS 用recursiveDescription打印View

    今天要做一个搜索功能,用到UISearchBar 无奈背景太丑,就自定义了一个,首先用View私有方法打印一下searchBar的层次, 具体修改代码如下 for (UIView *view in _ ...

  5. linux 使用mail 发送邮件

    配置: /etc/mail.rc 追加配置参数 set from=lynctest@iclinux.com smtp="mail.iclinux.com"smtp-auth-use ...

  6. debian 9 安装AMD驱动

    目录 debian 9 安装AMD驱动 安装驱动之前: 安装驱动: 安装驱动之后: debian 9 安装AMD驱动 需求说明: 安装完成debian系统后独显驱动未安装 操作系统版本: kyeup@ ...

  7. js中取绝对值的2种方法!

    1.abs() var aaa=-20; var bbb=Math.abs(aaa); 2.加减法 var aaa=-20; var bbb=-aaa

  8. IS-IS IGP

    is-is  是igp的一种    属于osi的协议 OSI的三层是网络层      包含两种服务  一种是面向连接服务CONS       另一种是无连接服务CLNS CLNS中包含CLNP     ...

  9. linux open()文件操作

    python程序中经常用到的读文件: f = open("___", 'r') for line in f:#这里每次读取文件的一行,line为字符串,串尾包括了'\n'!!!   ...

  10. 1.ruby基本格式

    1.ruby对于空格是敏感的,很像shell 如:a + b 解释成 a+b(这是两个局部变量) a +b 解释成 a(+b) (这是一个方法调用) 2.在ruby中一行怎么才算结束? Ruby解释分 ...