free()与struct无法正常工作

时间:2014-11-03 14:52:55

标签: c struct free

在调用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;
}    

2 个答案:

答案 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}}的最后一个内容。