为什么 C 函数 free() 不删除值?

Tet*_*ndo 3 c malloc free memory-management

我正在学习 C 编程并编写如下基本代码。

我了解到该函数可以释放由等等free()分配的内存。calloc()

但是obj->idobj->name在执行 Object_destroy 后,尽管已执行函数,但仍具有值free()

为什么会出现这种情况?释放内存不等于删除值吗?

#include <stdio.h>
#include <stdlib.h>

typedef struct Object* Object;
struct Object
{
  int id;
  char* name;
};

Object Object_new(int id, char* name)
{
  Object obj = calloc(1, sizeof(struct Object));
  obj->id = id;
  obj->name = name;
  return obj;
}

void Object_destroy(Object obj)
{
  free(obj);
}

int main()
{
  Object obj = Object_new(5, "test");

  printf("%d\n", obj->id); // => 5
  printf("%s\n", obj->name); // => test

  Object_destroy(obj);
  printf("%d\n", obj->id); // => 5
  printf("%s\n", obj->name); // => test

  return(0);
}
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 5

malloc和视为free签署合同。

malloc是承诺这块内存属于你,不会被送给别人。除了内存大小或以任何方式初始化内存之外,它不保证任何内容。它甚至不会阻止其他函数或进程通过地址访问该内存,尽管这种访问确实是不好的行为。

free您是否将内存签名回分配器而不是其他任何东西。内存通常不会被“删除”,因为这会浪费周期:无论如何,下一个所有者将负责放入有意义的值。访问该内存与其他人访问提供给您的内存是同样的不良行为。您不知道该内存是否或何时在其他地方分配,并且一旦您决定调用free.