理论教育 C语言程序设计教程:动态内存管理方案

C语言程序设计教程:动态内存管理方案

时间:2023-11-21 理论教育 版权反馈
【摘要】:C语言提供了动态内存管理机制,可以建立可变长数组,即在程序运行时根据实际需要分配内存空间。动态分配内存并使用后,及时回收内存是非常重要的,free ()函数用于内存回收。例9.14 动态分配内存存储若干位学生的一门课成绩。

C语言程序设计教程:动态内存管理方案

在定义一个数组时,必须事先指定其长度。例如:

int a[ 100];

或者:

#define MAX_SIZE 100;

int a[ MAX_SIZE] ;

在实际设计应用时,只有程序运行以后才知道数组的确切长度,希望这样来定义数组:

int a[程序实际需要的元素个数];

但在C语言中,这是不合法的。

C语言提供了动态内存管理机制,可以建立可变长数组,即在程序运行时根据实际需要分配内存空间。具体方法:定义一个指针变量,通过函数malloc ()实现动态分配内存,然后把动态分配的内存空间的起始地址保存在该指针中。

(1)分配内存空间函数malloc ( ) 。

函数malloc ()的一般形式为:

说明:该函数可以在内存的动态存储区中分配出一块长度为size字节的连续区域,其返回值为该区域的起始地址。该函数的返回值默认是void类型指针,在具体使用时可以强制转化为需要的类型或者由系统自动转化为需要的类型。size是一个无符号整数,即请求分配的字节数。如果分配成功,malloc ()返回指向一块内存的第一个字节的指针;若系统内存不足,将导致内存分配失败,malloc ()返回一个空指针。例如:

char * pc;

pc = (char * ) malloc (60) ;

表示分配60个字节的内存空间,并强制转化为字符类型, (char * ) malloc (60)的返回值为指向该内存空间起始地址的指针,把该指针赋值给字符型指针变量pc,就可以通过该指针pc访问分配到的60个字节的字符型内存空间。

(2)分配内存空间函数calloc ( ) 。

calloc ()函数的一般形式为:(www.daowen.com)

说明:该函数可以在内存的动态存储区中分配出n块长度为size字节的连续区域,其返回值为该区域的起始地址。类型标识符表示该区域用于任何数据类型,同malloc函数类似,size是一个无符号整数。例如:

ps = (struct student * ) calloc (10 , sizeof ( struct student) ) ;

表示分配10个struct student长度的连续区域,每个区域强制转化为struct student类型,并把起始地址赋值给指针变量ps。在构造链表过程中可以使用该函数。

(3)释放内存空间函数free( )。动态分配内存并使用后,及时回收内存是非常重要的,free ()函数用于内存回收。

free ()函数的一般形式为:

说明:该函数释放p所指向的一块内存空间,p是一个任意类型的指针变量,指向被释放区域的起始地址,通常与malloc ()函数及calloc ()函数配合使用。

注意:由于函数malloc ( ) , calloc ()和free ()都是在标准库函数stdlib.h中,所以在程序中使用这3个函数时,必须包含编译预处理命令#include < stdlib.h > 。

例9.14 动态分配内存存储若干位学生的一门课成绩。

解题思路:

假设学生人数不固定,所以不能用数组结构存储一门课程的成绩,要求根据需要动态分配空间。

编写程序:

创建一个名为“eg9_14.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

程序中调用动态分配内存函数malloc ( ),根据实际需要动态分配存储空间,实现了可变长存储空间要求,很好地克服了数组使用的局限性。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈