free()究竟做了什么?
🤖:free释放的是指针所指的内存空间,即将该内存空间归还给了操作系统。
⚠️:但free之后,指针仍然存在,指针指向也不变,指针的内容仍存在且不变。
例子:
#include<stdio.h>
#include<stdlib.h>
void main()
{
char *p;
p =(char*)malloc(100*sizeof(char));
printf("\n第一次输入:");
scanf("%s",p);
printf("\n第一次输出:%s\n",p);
free(p);
printf("\n释放之后的输出:%s\n",p);
p=NULL;
printf("\n释放后赋空的输出:%s\n",p);
}
执行结果:
第一次输入:boy
第一次输出:boy
释放后输出:boy
释放后赋空的输出:NULL
(释放后的输出可能和原来的内容一样,也可能是乱码。)
另:
C语言中malloc与free常常成对出现。
一般有malloc,必须有与之对应的free;而free可以单独出现。
做个比喻:
malloc是个大美女💃,free是追随者🏃,你看到malloc出现了,就会在它身后看见她的小迷妹free。💃🏃
但是free呢,free🚶单独出现很正常,大美女可不一定跟在它的周围。🚶
知道了free,我们再看看它的伴侣malloc:
转载:malloc如何分配到内存空间的?🐧