Free() 不释放内存

Dem*_*mha 0 c free heap-memory

我不明白为什么这里的 free 不起作用,而我在 printf 中仍然得到 5。我应该将 p 值指向 NULL 吗?我搜索了很多线程,但没有找到任何关于此的有用信息。

#include<stdio.h>

void main(){
  int *p = malloc(sizeof(int));
  *p = 5;
  free(p);
  printf("%d\n",*p);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

该函数称为freenot erase,它不会“擦除”指针指向的内存,它只是允许该内存区域用于其他用途。printf打印之前的值,这意味着没有发生任何其他事情来使用刚刚释放的内存。

无论如何,您仍然试图访问不再属于您的内存,从而引发未定义的行为。代码可能会崩溃,或者打印以前的值,或者打印垃圾,或者它可能会在控制台上绘制一个独角兽,这就是导致未定义行为...未定义的原因。