为什么在C中释放struct仍然有数据?

kli*_*eta 3 c memory free struct

当我运行此代码时:

#include <stdio.h>

typedef struct _Food
{
    char          name [128];
} Food;

int
main (int argc, char **argv)
{
    Food  *food;

food = (Food*) malloc (sizeof (Food));
snprintf (food->name, 128, "%s", "Corn");

free (food);

printf ("%d\n", sizeof *food);
printf ("%s\n", food->name);
}
Run Code Online (Sandbox Code Playgroud)

我还是得到的

128
Corn
Run Code Online (Sandbox Code Playgroud)

虽然我已经解放了食物.为什么是这样?记忆真的被释放了吗?

bob*_*vil 10

当你释放"食物"时,你说你完成了它.但是,指针食物仍然指向相同的地址,并且该数据仍然存在(将不必要时释放的每一位内存归零都是太多开销)

基本上是因为它是一个很小的例子,这是有效的.如果在free和print语句之间有任何其他malloc调用,那么你可能不会看到这个,并且很可能会以某种糟糕的方式崩溃.你不应该依赖这种行为.