gpt4 book ai didi

无法释放结构体的数据

转载 作者:行者123 更新时间:2023-11-30 19:00:30 28 4
gpt4 key购买 nike

我有这个struct作为程序的一部分以及它的创建和销毁函数。但是,当我尝试释放struct时例如,程序从free崩溃相关错误,例如 main函数会崩溃并显示 munmap_chunk(): invalid pointer

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

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

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;

最佳答案

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

Eu new = malloc(sizeof(new));

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

为指针指向分配空间。

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

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

关于无法释放结构体的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59520429/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com