给出了以下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)
来释放容纳指针的衣服,但是似乎没有任何效果。
我在做什么错?
答案 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));