当我运行这段代码时:
#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);
}
我仍然得到
128
Corn
虽然我已经免费了食物。为什么是这样?内存真的被释放了吗?
当你释放“食物”时,你就表示你已经受够了。然而,指针 food 仍然指向相同的地址,并且该数据仍然存在(如果不需要时必须将释放的每一位内存清零,开销会太大)
基本上是因为它是一个很小的例子,所以它有效。如果在 free 和 print 语句之间有任何其他 malloc 调用,您可能不会看到这种情况,并且很可能会以某种可怕的方式崩溃。您不应该依赖这种行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)