释放指向struct的指针会导致程序“卡住”

时间:2018-08-24 12:40:35

标签: c pointers struct free

给出了以下C代码:

struct list_element
{
    struct list_element * next;
};
typedef struct list_element list_element;

typedef struct
{
    list_element header;
    int value;

} *apple;

apple a = malloc(sizeof(apple));
a->value = 1;
free(a);

但是,程序在free()函数中被“卡住”(在发行配置中,程序崩溃)。我还尝试过free(&a)来释放容纳指针的衣服,但是似乎没有任何效果。

我在做什么错?

1 个答案:

答案 0 :(得分:6)

apple a = malloc(sizeof(apple));

将以指针大小而不是实际结构分配内存。

  

避免对指针的typdefing结构;

typedef struct
{
    list_element header;
    int value;

} apple;
apple *a = malloc(sizeof(apple ));

或 最好的方法是引用type所持有的pointer,如下所示。

typedef struct
{
    list_element header;
    int value;

} *apple;
apple a = malloc(sizeof(*a));