因为free函数仅仅是告诉操作系统,这一块内存被释放了,可以用来作其它用途。但是,由于你没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化。所以输出值不变。
公司主营业务:成都网站设计、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出富拉尔基免费做网站回馈大家。
通常建议,将这个p用完了也置NULL
free属于stdlib.h头文件!除了free,malloc、calloc、realloc四个用于建立内存动态分配的函数均在这个头文件中。
free函数的用法释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。
free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete/delete [] 要方便。如在分配指针时,用的是new或new[]。
在释放内存时,并不能图方便而使用free来释放。反过来,用malloc 分配的内存,也不能用delete/delete[]来释放。
举例:
int* p = (int *) malloc(4);
*p = 100;
free(p); //释放 p 所指的内存空间
或者:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。
……
free(p);
扩展资料
1、free是和malloc、realloc或者calloc函数成对出现的,来保证动态分配的空间及时释放。
2、一块动态申请的内存用free释放一次就够。
在 C 语言中,free( ) 是释放内存的库函数,它的函数原型在 stdlib.h 头文件中有定义。
另外,为指针变量分配内存的库函数有:malloc( )、calloc( )、realloc( )。
但是记住一点就是,为某个指针变量分配了一个内存的同时,必须要判断该内存分配是否成功。即:如果返回空指针 NULL,那么内存分配失败,立即退出应用程序,根本就不需要使用 free( ) 函数释放内存。否则的话,如果内存根本就没有分配成功,仍然使用 free( ) 函数去释放内存,系统也会出问题的。
根据我多年的编程经验,最好的程序可以写成如下的风格,详细举例如下(以 malloc 为例,其它函数同理):
#include stdio.h
#include stdlib.h /* malloc( ) 函数、free( ) 函数在此头文件有定义 */
void main( ) /* 主函数开始 */
{
char * p ; /* 定义一个字符指针变量 p */
p = (char *)malloc(10000*sizeof(char) ) ; /* 为 p 分配一块大小为 10000 个字节的内存,因为 sizeof(char) 的值为 1,故 malloc 分配的总大小为:10000 */
if( p == NULL ) /* 该语句绝对不能够省略,如果分配内存失败(即:返回 NULL),则立即退出应用程序,此时根本就不需要使用 free( ) 进行释放内存 */
{
printf("Memory allocation failured !\n") ; /* 输出:内存分配失败 */
exit(1) ; /* 立即退出应用程序 */
}
strcpy( p , "This is a test string !!!\n" ) ; /* 如果内存分配成功的话,往变量 p 中拷贝一个字符串 */
printf("%s\n", p) ; /* 将拷贝到 p 中的字符串显示在屏幕上 */
free( p ) ; /* 此时在退出应用程序之前,一定要记得使用 free( ) 函数释放刚才成功分配到的内存 */
}
free()为C语言函数。
头文件:malloc.h或stdlib.h
作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数。
使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
用 法: void free(void *ptr);
程序例:
#include string.h
#include stdio.h
#include alloc.h //or #include malloc.h
int main(void)
{
char *str;
/* allocate memory for string */
str = (char *)malloc(10);
/* copy "Hello" to string */
strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);
/* free memory */
free(str);
return 0;
}
1.不是,只是释放第一个
2.当Q.front不指向NULL,则重复做一下的事:
Q.rear指向下一节点,删除Q.front指向的节点。 Q.front指向下一节点。其实就是每次都删除第一个节点。直到全删完。