无法释放结构的数据
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 并在需要的每个声明中显式使用指针。
我将此 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 并在需要的每个声明中显式使用指针。