下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 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. Re:从零开始的Linux之路(文件权限)

    基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 基本概念 Linux最核心的一个概念就是:Linux里面任何东西都可以被视为一个文件,包括系统本身(说到底L ...

  2. 多线程并发情况下 重复insert问题

    代码逻辑: if(数据不存在){ insert(); } 线程启动后,发现数据库表中有相同的记录 解决方案 synchronized同步代码块即加同步锁,synchronized同步代码块的功能: 当 ...

  3. angular 组件之间传值

    /** * Created by Administrator on 2017/8/28. */ var app =angular.module('app',[]); app.directive('fo ...

  4. bootshiro---开源的后台管理框架--基于springboot2+ shiro+jwt的真正rest api资源无状态认证权限管理框架,开发人员无需关注权限问题,后端开发完api,前端页面配置即可

    https://gitee.com/tomsun28/bootshiro

  5. 此坑待填 离散化思想和凸包 UVA - 10173 Smallest Bounding Rectangle

    Smallest Bounding Rectangle Given the Cartesian coordinates of n(>0)2-dimensional points, write a ...

  6. EasyUI combogrid 赋多个值

    var values = []; for (var i = 0; i < rows.length; i++) { if (rows[i].id>0 ) { values.push('' + ...

  7. 【bzoj3489】A simple rmq problem 三维KD-tree

    题目描述 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可能大.如果找不到这样的数,则直接输出0.我会 ...

  8. 【Luogu】P1040加分二叉树(区间DP)

    题目链接 区间DP,因为中序遍历的性质:区间[l,r]的任何一个数都可以是该区间的根节点. 更新权值的时候记录区间的根节点,最后DFS输出. 见代码. #include<cstdio> # ...

  9. BZOJ 1191: [HNOI2006]超级英雄Hero【二分图匹配】

    裸的匹配题,一眼就能看出来二分图的模型,是某个经典题的改编.貌似某本图论书上讲过的,有N个人以及M个职位,每个职位只能提供给一个人,而每个人由于能力有限只能胜任有限个职位,问是否有办法使得每个人都有工 ...

  10. ngrinder的安装

    1.官网下载war包(ngrinder-controller),可以使用tomcat启动或者直接nohup java -XX:Permsize=200m -jar ngrinder-3.4.1.war ...