free函数需要头文件:
include <stdlib.h>
情景1.free函数必须和malloc函数同时使用不然会报错如下:
free函数无法释放栈内存的变量
#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{
int name;//结构体里面定义一个变量叫做name
};
int main()
{
struct node *p;//定义一个结构体变量
free(p);
}
结果:
原因:free只能释放由malloc动态分配在堆内存的内存,直接在主函数定义结构体变量是分配在栈内存里的内存,所以释放不了。
改为:
#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{
int name;//结构体里面定义一个变量叫做name
};
int main()
{
struct node *p = malloc(sizeof(struct node));//定义一个结构体变量
free(p);
}
情景2:free函数释放的是指针所指向的地址的内存(不是指针本身所在地址的内存)因此可以通过函数直接释放内存:
#include<stdio.h>
#include<stdlib.h>
struct node //定义结构体
{
int name;//结构体里面定义一个变量叫做name
};
void fun(struct node *p)
{
free(p);
}
int main()
{
struct node *p = malloc(sizeof(struct node));//定义一个结构体变量
p->name = 10;//给结构体赋值
printf("%d\n",p->name);
fun(p);//释放内存
printf("%d",p->name);
}
结果:
因为内存已经被释放掉了所以打印出来的是一个地址