C 标准函数库提供了许多函数来实现对堆上内存管理
malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化)
free函数:释放内存,防止内存泄露
calloc函数:与 malloc类似,但不需要初始化
realloc函数:重新分配内存
头文件stdlib.h
malloc
malloc函数可以从堆上获得指定字节的内存空间,其函数原型如下:
void * malloc(int n)
其中,形参n为要求分配的字节数。如果函数执行成功,malloc返回获得内存空间的首地址;如果函数执行失败,那么返回值为NULL。由于malloc函数值的类型为void型指针,因此,可以将其值类型转换后赋给任意类型指针,这样就可以通过操作该类型指针来操作从堆上获得的内存空间。
需要注意的是,malloc函数分配得到的内存空间是未初始化的。因此,一般在使用该内存空间时,要调用另一个函数memset来将其初始化为全0。memset函数的声明如下:
void * memset (void * p,int c,int n)
该函数可以将指定的内存空间按字节单位置为指定的字符c。其中,p为要清零的内存空间的首地址,c为要设定的值,n为被操作的内存空间的字节长度。如果要用memset清0,变量c实参要为0。malloc函数和memset函数的操作语句一般如下:
int * p=NULL;
p=(int *)malloc(sizeof(int));
if(p==NULL)
printf("Can't get memory!\n");
memset(p,0,siezeof(int));
通过malloc函数得到的堆内存必须使用memset函数来初始化
#include <stdio.h>
#include <stdlib.h>