C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间释放,为有效地使用内存资源提供了手段。
动态数组,指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小。其本质就是一个指向数组的指针变量。
主要用到的内存管理函数是:malloc和free。
1、分配内存函数malloc:
调用形式:(类型说明符*)malloc(size);
功 能:在内存的动态存储区中分配一块长度为size字节的连续区域。
返 回:该区域的首地址。
“类型说明符”表示把该区域用于何种数据类型。
“(类型说明符*)”表示把返回值强制转换为该类型指针。
“size”是一个无符号数。
例如,pc = (char *)malloc(100);表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针。
2、释放内存空间函数free:
调用形式:free(void *ptr);
功 能:释放ptr所指向的一块内存空间。ptr是一个任意类型的指针变量,它指向被释放区域的首地址。
实现一维动态数组程序框架:
…
int num; //要创建一个大小为num的一维数组,num由用户输入或其他方式获得
int *array; //创建一维指针来指向一维数组
…
array = (int *)malloc(sizeof(int) * num); //动态创建一个大小为num的整形一维数组
if(array == NULL)
{
printf(“out of memory, press any key to quit… ”);
exit(0);
}… //使用动态数组
free(array); //释放由malloc申请的内存空间
实现二维动态数组程序框架:
…
int i;
int row, col; //要动态创建一个行数为row,列数为col的二维数组,row和col由用户输入或其他方式获得
int **array; //创建二维指针来指向二维数组
array = (int **)malloc(sizeof(int *) * row); //动态创建一个大小为row×col的整形二维数组
for(i=0; i<row; i++)
{
array[i] = (int *)malloc(sizeof(int) * col);
}… //使用动态数组
for(i=0; i<row; i++)
{
free(array[i]); //先释放一维指针
}
free(array); //最后释放二维指针