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调用,那么你可能不会看到这个,并且很可能会以某种糟糕的方式崩溃.你不应该依赖这种行为.