
void free (void * p);
由于形式参数是空指针,因此free函数可以接受任何类型的指针参数.

但是,free函数仅释放指针指向的内容,而指针仍指向原始点. 此时,指针是一个野指针. 如果此时操作指针,将导致意外错误. 安全的做法是: 使用free函数释放指针所指向的空间后,将指针的值设置为NULL. 因此,对于上面的演示,您需要在return语句之前添加以下两行语句:
free(p);
p=NULL;

注意: 必须使用malloc函数分配的堆空间在程序结束之前释放.
calloc函数的功能类似于malloc函数的功能,后者从堆中分配内存. 其功能声明如下:

void *calloc(int n,int size);
该函数的返回值是一个空指针. 如果执行成功,则函数从堆中获取X n个字节空间的大小,并返回该空间的第一个地址. 如果执行失败,函数将返回NULL. 此函数与malloc函数之间的重要区别是,由calloc函数获得的内存空间已初始化,并且其内容全为0. calloc函数适用于为数组应用空间. 您可以将大小设置为数组元素的空间长度calloc函数使用,将n设置为数组的容量.

提示: calloc函数分配的内存也需要自己释放.
realloc函数的功能比malloc和calloc函数的功能丰富,并且可以实现内存分配和内存释放的功能. 函数声明如下:
void * realloc(void * p,int n);
其中,指针p必须是指向堆内存空间的指针,即,通过malloc函数calloc函数使用,calloc函数或realloc函数分配空间的指针. realloc函数将指针p指向的存储块的大小更改为n个字节. 如果n小于或等于p指向的空间的大小,则. 保持原始状态不变. 如果n大于p指向的空间大小,则系统将从堆中为p重新分配大小为n的内存空间,同时将原始指向的空间的内容复制到新的内存中空间依次,p点空间已释放. relloc函数分配的空间也未初始化.
注意: 必须使用free函数或指针参数为NULL的realloc函数释放由malloc函数,calloc函数和realloc函数分配的内存空间.
注意: 如果要使用realloc函数分配的内存,则必须使用memset函数初始化其内存.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-189124-1.html
其实也就等同于今后任何国家到美国去巡航