作者:李东润 | 来源:互联网 | 2022-12-06 18:03
给出以下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> kiran Birada..:
apple a = malloc(sizeof(apple));
将指针的大小分配给内存而不是实际结构.
避免将结构设置为指针;
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));
@NaveTseva查看最后一行,他保存你的typedef.虽然你应该知道`sizeof`不是一个函数,但是当与表达式一起使用时,这些括号是多余的(因为它几乎总是如此).