发布网友 发布时间:2022-04-29 11:33
共1个回答
热心网友 时间:2022-06-27 00:18
free再次释放已释放的空间,不会有任何释放效果,因为free释放地址,是对地址作标记,表示该地址未被使用,可以再次用于分配。并不是说内存就消失了。
(注意:1,free后原内存中的数据,不变或被重置。2,free后不会自动将指针置NULL,需要手动置NULL,继续用指针访问已释放的地址是不安全的。)
下面演示代码(正常不要这么写!!!)
#include <stdio.h>
#include <malloc.h>
int main()
{
int *p=NULL;
p=(int *)malloc(sizeof(int));
*p=123;
printf("p初值:%d\n",*p);
free(p);
printf("第一次释放后!\n");
printf("p=%d\n",*p);
printf("指针未置NULL的情况下,再次给指针指向地址赋值123后:\n");
*p=123;
printf("p再次赋值%d\n",*p);
free(p);
printf("再次释放后\n");
printf("p=%d\n",*p);
return 0;
}