无法释放结构的数据

Cannot free a struct's data

我将此 struct 作为程序的一部分以及它的创建和销毁功能。但是,当我尝试释放 struct 实例时,程序因 free 相关错误而崩溃,例如 main 函数会因 munmap_chunk(): invalid pointer

而崩溃

我不明白为什么指针无效。

p.s.: 在 euCreate() 中初始化 new 的最佳方法是什么?我尝试的所有操作要么导致内存泄漏,要么不起作用。

Eu euCreate()
{
    Eu new = malloc(sizeof(new));
    (*new).Judges = malloc(sizeof(Judge) * 2);
    (*new).Jlen = 2;
    (*new).Jidx = 0;
    (*new).States = malloc(sizeof(State) * 2);
    (*new).Slen = 2;
    (*new).Sidx = 0;
    return new;
}

void euDestroy(Eu eu)
{
    free(eu->Judges);
    free(eu->States);
}

int main()
{
    Eu eu = euCreate();
    euDestroy(eu);
}

typedef struct eu{
    struct judge* Judges;
    int Jlen;
    int Jidx;
    struct state* States;
    int Slen;
    int Sidx;
}* Eu;

您没有为您的结构分配足够的 space:

Eu new = malloc(sizeof(new));

sizeof(new) 为您提供指针的大小,而不是它指向的内容。因此,当您随后将值分配给结构的成员时,您将超出分配内存的范围。这会调用 undefined behavior,在这种情况下会导致您的代码崩溃。

为指针指向的分配space。

Eu new = malloc(sizeof(*new));

此外,对指针进行类型定义是不好的做法,因为它掩盖了您正在使用指针这一事实。最好只对结构进行 typedef 并在需要的每个声明中显式使用指针。