C语言的动态内存分配

转载 2012年03月27日 21:37:15
本文整理摘自:  在C语言中,数组的长度是预先定义好的, 在整个程序中固定不变。C语言中不允许动态数组类型。
例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的。但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定。
  对于这种问题, 用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间, 也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 常用的内存管理函数有以下三个: 
1.分配内存空间函数malloc 
malloc调用语法形式: (类型说明符*) malloc (size
功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。 “size”是一个无符号数。
例如: pc=(char *malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 并把该指针赋予指针变量pc。 
2.分配内存空间函数calloc 
calloc 也用于分配内存空间。
调用语法形式: (类型说明符*)calloc(n,size
功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。
类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。 “n”,“size”是一个无符号数calloc函数 与malloc 函数的区别仅在于一次可以分配n块区域。
例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求结构体stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。 
3.释放内存空间函数free 
调用语法形式: free(void*ptr); 
功能:释放ptr所指向的一块内存空间,ptr 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloccalloc函数所分配的区域。

C语言中手把手教你动态内存分配

C语言中手把手教你动态内存分配动态内存分配常见的内存分配的错误先上一个内存分配的思维导图:便于联想想象,理解: 首先我们介绍一下内存分配的方式:1:在静态存储区域中进行分配 内存在程序...
  • qq_29924041
  • qq_29924041
  • 2017年02月06日 23:21
  • 11094

动态内存分配的C代码示例

之前有同学在QQ上问我,C语言中的动态内存分配是怎么回事。首先,我们来看看内存分配的概念,它是指在程序执行的过程中分配或者回收存储空间的方法。一般说来,内存分配方法分为静态内存分配和动态内存分配两种。...
  • zhouzxi
  • zhouzxi
  • 2016年09月02日 20:58
  • 4013

C语言之动态分配内存

首先,我们应该知道,所有的程序都必须留出足够的内存空间来存储所使用的数据,所以我们经常会预先给程序开辟好内存空间,然后进行操作,但其实还有一种选择,能够让内存分配自动进行下去。对于传统数组,会遇到这样...
  • qq_26768741
  • qq_26768741
  • 2016年03月16日 12:26
  • 3523

模拟实现c语言中的动态内存分配malloc函数

动态存储器分配器维护着一个进程的虚拟的存储器区域,称为堆(heap)。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟存储器片(chunk),要么是已经分配的,要么是空闲的。 我...
  • shandongdaya
  • shandongdaya
  • 2012年02月28日 21:28
  • 3360

C语言 利用malloc()和realloc()动态分配内存

1. C语言定义1个数组的时候, 必须同时指定它的长度. 例如:  int a[5]={1,2,3,4,5}; //合法 int b[6]; //合法 int c[]; //...
  • nvd11
  • nvd11
  • 2013年04月02日 00:58
  • 1933

C语言的动态内存分配

在定义数组的时候,必须明确指定数组的长度。这样,无论实际包含多少个元素,每次运行时,数组的长度都是不变的,就可能因实际包含元素过少造成内存空间的浪费,或过多而内存空间不够造成访问越界问题。因此,需要根...
  • lemonrabbit1987
  • lemonrabbit1987
  • 2015年08月21日 07:31
  • 343

Linux 下C语言学习(六)——二级指针、动态内存分配,函数指针与文件操作

二级指针   一级指针用来保存普通变量的地址   二级指针用来保存一级指针变量的地址     数据类型** 变量名;        Intnum = 0; 一级指针:        In...
  • pangyaojian
  • pangyaojian
  • 2014年07月03日 16:00
  • 933

C语言动态内存分配

C语言动态内存分配        动态数据结构可以在运行时灵活添加、删除或重排数据项。在运行时分配内存空间的过程称为动态内存分配。内存分配函数如下: malloc   分配所需的字节大小,并返回指...
  • ylzxscj
  • ylzxscj
  • 2013年11月23日 17:58
  • 553

C语言-动态内存分配

1、malloc函数 函数原型是:void * malloc(unsigned int size) 在内存的动态存储区中分配一个长度为size的连续空间。 2、calloc函数 函数原...
  • le_shuo
  • le_shuo
  • 2014年11月08日 22:55
  • 358

C语言10 -- 动态内存分配

// // main.m // C10 – 内存 // // Created by dllo on 15/7/13. // Copyright (c) 2015年 Gaozi. Al...
  • gao_zi
  • gao_zi
  • 2015年07月21日 20:28
  • 342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言的动态内存分配
举报原因:
原因补充:

(最多只允许输入30个字)