free
函数原型: void free(void *ptr); //*ptr是申请的内存空间地址
只能释放 malloc calloc realloc 动态申请的内存
calloc
函数原型: void * calloc(size_t nmemb,size_t size);
在内存堆中,申请nmemb块,每块大小为size个字节数的连续区域
例: char * p=(char *) calloc (3,100);
malloc内存中存放的内容是随机的,calloc函数申请的内存内容为0。也就是说,malloc需要初始化,用calloc一旦申请空间成功,内容就为0。
realloc动态追加或减少空间
函数原型: void *realloc(void *ptr, size_t size);
作用:尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
参数:
ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。
size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。
返回值:
该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。
动态申请的内存地址可能改变,因此必须接收返回值。
注意事项:
1、指向堆区的指针变量不要随意改变指向,否则可能导致内存泄漏;
2、不要操作已释放的空间,其内容不确定;
3、不要重复释放;
防止重复释放的操作:
if(p!=NULL)
{
free(p);
p=NULL;
}