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

Nav*_*eva 2 c free struct pointers

给出以下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);
Run Code Online (Sandbox Code Playgroud)

但是,程序在free()函数中"卡住" (在发布配置中,程序崩溃).我也试图free(&a)释放拿着指针的衣服,但似乎没有任何作品.

我究竟做错了什么?

kir*_*dar 6

apple a = malloc(sizeof(apple));
Run Code Online (Sandbox Code Playgroud)

将指针的大小分配给内存而不是实际结构.

避免将结构设置为指针;

typedef struct
{
    list_element header;
    int value;

} apple;
apple *a = malloc(sizeof(apple ));
Run Code Online (Sandbox Code Playgroud)

或者最好的方式是指将typepointer持有像下面.

typedef struct
{
    list_element header;
    int value;

} *apple;
apple a = malloc(sizeof(*a));
Run Code Online (Sandbox Code Playgroud)

  • @NaveTseva查看最后一行,他保存你的typedef.虽然你应该知道`sizeof`不是一个函数,但是当与表达式一起使用时,这些括号是多余的(因为它几乎总是如此). (2认同)