Free() 不释放内存
Free() not freeing memory
我不明白为什么这里的 free 不起作用,我仍然在 printf 中得到 5。
我应该将 p 值指向 NULL 吗?
我搜索了很多话题,但没有找到任何有用的信息。
#include<stdio.h>
void main(){
int *p = malloc(sizeof(int));
*p = 5;
free(p);
printf("%d\n",*p);
}
该函数被称为 free
而不是 erase
,它不会“擦除”指针指向的内存,它只是允许该内存区域用于其他用途。 printf
打印了之前的值,这意味着没有发生任何其他事情来使用刚刚释放的内存。
无论如何,您仍在尝试访问不再属于您的内存,因此调用未定义的行为。代码可能会崩溃,或者打印以前的值,或者打印垃圾,或者它可能会在控制台上画一个独角兽,这就是未定义行为的原因……未定义。
我不明白为什么这里的 free 不起作用,我仍然在 printf 中得到 5。 我应该将 p 值指向 NULL 吗? 我搜索了很多话题,但没有找到任何有用的信息。
#include<stdio.h>
void main(){
int *p = malloc(sizeof(int));
*p = 5;
free(p);
printf("%d\n",*p);
}
该函数被称为 free
而不是 erase
,它不会“擦除”指针指向的内存,它只是允许该内存区域用于其他用途。 printf
打印了之前的值,这意味着没有发生任何其他事情来使用刚刚释放的内存。
无论如何,您仍在尝试访问不再属于您的内存,因此调用未定义的行为。代码可能会崩溃,或者打印以前的值,或者打印垃圾,或者它可能会在控制台上画一个独角兽,这就是未定义行为的原因……未定义。