当使用free()释放内存时,为什么指针指向的内容没有改变?

Avi*_*mar 3 c malloc free pointers memory-management

在动态内存分配方面,我是新手.当我们释放内存时,使用void free(void *ptr)内存被释放,但指针的内容不会被删除.这是为什么?最新的C编译器有什么不同吗?

Lun*_*din 8

计算机不会"删除"内存,它们只是停止使用对该内存单元的所有引用,并忘记存储任何有价值的东西.例如:

int* func (void)
{
  int x = 5;
  return &x;
}

printf("%d", *func()); // undefined behavior
Run Code Online (Sandbox Code Playgroud)

一旦函数完成,程序就会停止保存存储的存储位置,x程序的任何其他部分(或者可能是另一个程序)都可以自由使用它.所以上面的代码可以打印5,或者它可以打印垃圾,或者它甚至可能导致程序崩溃:引用已经停止有效的内存单元格的内容是未定义的行为.

动态内存也不例外,并以相同的方式工作.一旦你打电话free(),任何人都可以使用那部分内存的内容.

另外,请看这个问题.