malloc动态分配多维数组
下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 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动态分配多维数组的更多相关文章
- C语言如何动态分配二维数组
C语言如何动态分配二维数组(转载) 原文链接:https://www.cnblogs.com/0xWitch/p/9314621.html 使用malloc().free()函数进行动态分配,这两个函 ...
- c++ 动态分配二维数组 new 二维数组
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...
- C与C++动态分配二维数组
C: C中使用函数malloc和free两个函数. //动态分配M*N维 int **a=(int **)malloc(sizeof(int*)*M); ;i<M;i++) a[i]=(int ...
- 对数组进行malloc动态分配的一些总结
笔者在处理程序奔溃问题的时候,遇到栈溢出的情况,栈溢出最常见的情况是:迭代调用和数组过大.数组占用占空间,所以改为了malloc方式放在堆上.想想,就想整理一下关于对多维数组的动态分配问题. 一,堆和 ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- c 二维数组动态分配和释放
c动态语言 函数声明的头文件在<stdlib.h>里 使用malloc函数为字符串分配内存 -->记得释放内存 free() #include <stdio.h> #in ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
- C语言中二维数组如何申请动态分配内存
C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc. ...
- c中使用malloc动态申请二维数组
前言 今天写代码的时候,想要动态的申请一个二维数组空间,思索了一段时间才写出来,这里记录一下吧,以后就不至于再浪费时间了.下面以申请int型数组作为例子: 申请一维数组 一维数组的数组名可以看成数组起 ...
随机推荐
- python:mysql增量备份
模块:MySQLdb Crypto加密 ConfigParser加载配置 mydb.py #!/usr/bin/env python #coding=utf-8 import MySQLdb as m ...
- (转)iOS 最佳实践
本文转自http://www.jianshu.com/p/b0bf2368fb95 感谢作者和译者 iOS最佳实践 iOS最佳实践 译者注 本文翻译自 futurice 公司的 iOS Good Pr ...
- POJ:2753-Seek the Name, Seek the Fame
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Description The little cat is s ...
- python库——h5py入门讲解
本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,作者刚接触h5py,完全靠看文档自学,如果哪里说的不对,欢迎纠正!如果读者需要进一步详细的学习h5py的更多知识,请参考h5p ...
- android-csv-variants
android-csv-variants https://github.com/zawn/android-csv-variants/ 目的 用于在Android Gradle构建时通过CSV文件配置V ...
- linux查找和替换命令
http://blog.csdn.net/imyang2007/article/details/8105499 命令的东西应该多练,熟能生巧.
- HP DL380 G5 安装操作系统流程
1.准备服务器引导盘,设置光盘启动.注意:会将服务器所有数据清除 2.依据引导盘选择需要的安装系统 3.插入系统安装光盘.ps:若kvm等远程工具无法插入光盘,需要插入物理介质的安装光盘
- 【02】markdown在线编辑器
[01]在线编辑器 https://www.zybuluo.com/mdeditor 在线 Markdown 编辑阅读器 pen - 是一个Markdown编辑器工具.demo 你可以试试这个在线的m ...
- SPOJ - ADAQUEUE ,双端队列简单运用!
ADAQUEUE - Ada and Queue 表示这题是学弟带的榜,题还没看完,学弟吐了一句:这不就是双端队列嘛.于是掏出布满尘埃的<曾粽根ACM程序设计>,嗯,确实是裸题,现学现做. ...
- BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
我们枚举第一个经过的坏点,然后DP即可. 状态转移方程不是难点,难点在于组合数的处理. 将狼踩尽的博客中有很详细的证明过程,但是我只记住了结论 $n=a_1 * p^k+a_2*p^k-1...$ $ ...