说明:
C语言中,编写程序的时候不能确定内存变量应该定义为多大,程序员希望在程序运行的时候根据数据量的大小向系统动态获得内存空间。所谓动态内存管理,就是指在程序执行的过程中动态地申请和回收内存空间。动态内存管理不像变量和数组那样在程序编写时预先分配内存空间,而是根据程序的需要即时分配,而且分配的内存大小就是程序要求的大小。
C语言允许程序动态申请内存,用于存放一些数据,需要时随时开辟,不需要时随时释放。C语言中,内存的动态分配是通过系统提供的库函数来实现的,主要有malloc和free 函数。
相关的库函数
1、malloc 函数
其函数的申明为:
void *malloc(unsigned int size);
其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址。
注意地址的基类型为 void(所以使用时一般会强转),即不指向任何类型的数据,。只提供一个地址。如果此函数未能成功的执行(例如内存空间不足),则返回空(NULL,即0)。
程序员需要定义一个指针来指向动态分配的内存地址。
例如:
int *pi=(int *)malloc(sizeof(int));
2、free 函数
函数申明为
void free(void *p);
其作用是释放指针 p 所指向的动态空间的地址。p 是调用 malloc 函数时的返回的地址。free函数无返回值。
例如:
free(pi); // 释放指针变量pi指向的已分配的动态空间
example:
纠错:以上所有的动态内存分配都必须强制类型转换:
// int *p =(int *) malloc(sizeof(int));
// char *p = (char *)malloc(sizeof(char));
结果:
内存被耗尽
在使用动态分配内存技术的时候,分配出来的内存必须及时释放,否则会引起系统内存耗尽,这话说起来简单,好像很容易做到,但是在实际开发中,程序员往往是漏洞百出。