在调用free()之后,为我的struct分配的内存应该是免费的。那么为什么我的代码仍在打印l->val
?尝试打印l->key
时为什么会失败?
#include <stdio.h>
typedef struct Node {
char *key;
char *val;
} Node;
int main(void) {
Node *l=malloc(sizeof(Node));
l->key="foo";
l->val="bar";
free(l);
printf("%s\n", l->val);
//printf("%s\n", l->key); /* this gives an error */
return 0;
}
答案 0 :(得分:0)
将指针释放后,将指针设置为NULL总是一个好习惯。 由于您访问的内存仍然完好无损,因此您可以看到l-&gt; val。
的正确值Node *l=malloc(sizeof(Node));
l->key="foo";
l->val="bar";
free(l);
l = NULL;
答案 1 :(得分:-2)
执行free(l);
释放l
指向的内存,即它可以再次用于另一个malloc()
或另一个内存使用。从那时起,在分配和更改内存之前,它通常保持相同的内容。所以阅读l
会在l
被释放之前提供{{1}}的最后一个内容。