所以我正在尝试使用 C 制作游戏并且我有以下类型:
typedef struct{
float x;
float y;
} vector;
typedef struct{
vector *vec;
void (*update)();
} velocity;
typedef struct{
vector *vec;
velocity *vel;
void (*move)();
} hero;
下面是给我一个错误的代码:
hero *h;
// allocate memory for hero
h = malloc(sizeof(hero*));
// allocate memory for velocity
h->vel = malloc(sizeof(velocity*));
// initialize vectors
h->vec = malloc(sizeof(vector*));
h->vel->vec = malloc(sizeof(vector*));
free(h->vec); // free hero vector
free(h->vel->vec); // free velocity vector
free(h->vel); // free velocity
free(h); // free hero
出于某种原因,free(h->vel) 在尝试释放速度时给我一个错误。为什么会这样?提前致谢!!
最佳答案
当你这样做时:
h = malloc(sizeof(hero*));
您正在为指向英雄的指针分配空间,而不是英雄的实例。
因此,您没有为结构分配足够的内存,并且写入结构的字段超出了分配内存的末尾。这会调用 undefined behavior ,在您的特定情况下,调用 free
时表现为崩溃。
从 sizeof
表达式中删除了 *
运算符,以便为您的结构实例分配足够的空间:
hero *h;
// allocate memory for hero
h = malloc(sizeof(hero));
// allocate memory for velocity
h->vel = malloc(sizeof(velocity));
// initialize vectors
h->vec = malloc(sizeof(vector));
h->vel->vec = malloc(sizeof(vector));
关于c - 释放由 malloc 分配的结构的结构会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45695281/