这是一些示例代码,但它基本上显示了我的问题(我编写了这个自由样式而没有编译它,所以它可能有一些语法错误,但这只是关于这个想法)。
typedef struct Person {
char name[25];
}Person;
int main() {
Person *p = malloc(sizeof(Person));
strcpy(p->name,"Philip");
free(p);
printf("%s",p->name); /* prints Philip but why? */
return 0;
}
所以我为 p 分配空间,在我给它起名字"菲利普"之后,我释放了它。所以,在我的理解中,p->name应该是NULL。我是否错误地使用免费?字符串"名称"仍然留在我的内存中不是"不好"吗?
所以,在我的理解中,p->name应该是NULL
为什么要NULL
?free()
的文档是否在任何地方说此函数将释放缓冲区的基础内存清零?不。那么问题是什么呢?
访问 free()
'd 指针后面的内存是未定义的行为。别这样。如果你这样做了,不要对任何结果感到惊讶。