首页 理论教育C语言程序设计教程:内存动态分配

C语言程序设计教程:内存动态分配

【摘要】:因此,C语言提供内存管理函数,可以按需要动态分配内存空间,也可以把不再使用的空间收回。分配一块区域,输入一个学生数据。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现了存储空间的动态分配与管理。

数组一章中,曾介绍过数组的长度是预先定义的,在整个程序中固定不变。C语言中不允许动态数组类型。例如:

变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据。对于这种问题,用数组的办法很难解决。因此,C语言提供内存管理函数,可以按需要动态分配内存空间,也可以把不再使用的空间收回。常用内存管理函数有3 个。

1.分配内存空间函数malloc

调用格式:

功能:在内存的动态存储区中分配一块长度为“size”字节的连续区域,“size”是一个无符号数。函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。例如:

表示分配100 个字节大小的单元,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。

2.分配内存空间函数calloc

调用格式:

功能:在内存动态存储区中分配n 块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。函数calloc 与malloc 的区别仅在于一次可以分配n 块区域。例如:(www.chuimin.cn)

其中的sizeof(struct stu)是求stu 的结构长度。因此该语句的意思是:按stu 的长度分配2 块连续区域,强制转换为stu 类型,并把其首地址赋予指针变量ps。

3.释放内存空间函数free

调用格式:

功能:释放ptr 所指向的一块内存空间,ptr 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区是由函数malloc 或calloc分配的。

【例7.8】分配一块区域,输入一个学生数据。程序如下:

程序运行结果如图7.9 所示。

图7.9 程序运行结果

说明:这里定义了stu 结构,定义了stu 类型指针变量ps。然后分配一块stu 结构的内存区,并把首地址赋予ps,使ps 指向该区域。再以ps 作为指向结构的指针变量对各成员赋值,并用printf 输出各成员值。最后用free 函数释放ps 指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现了存储空间的动态分配与管理。