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 打印了之前的值,这意味着没有发生任何其他事情来使用刚刚释放的内存。

无论如何,您仍在尝试访问不再属于您的内存,因此调用未定义的行为。代码可能会崩溃,或者打印以前的值,或者打印垃圾,或者它可能会在控制台上画一个独角兽,这就是未定义行为的原因……未定义。