在用 C 语言设计游戏实体系统时,我尝试了一种“equals-free”初始化方法。我很惊讶地看到一个 linter 告诉我在我的 init 函数结束时存在内存泄漏,并且我的变量ent
从未在以下代码中初始化。事实证明是正确的,因为我遇到了“总线错误”:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x;
int y;
} entity_t;
void entity_init(entity_t* ent, int _x, int _y)
{
ent = malloc(sizeof(*ent));
ent->x = _x;
ent->y = _y;
}
int main(void)
{
entity_t* ent;
entity_init(ent, 10, 24);
printf("Entity: x%d y%d", ent->x, ent->y);
return 0;
}
我认为上面的代码会做的是将我提供的空ent
指针作为参数,告诉它指向一些新分配的内存,然后填充该内存,一切都会好起来的。我不知道导致“总线错误”的真正原因是什么,我是否遗漏了一些关于指针和 malloc 的关键信息?
我隐约记得之前在一些 C 代码中看到过与此非常相似的东西(equals-free struct 初始化),如果在 C 中可能发生这样的事情,我强烈希望使用类似于此(损坏的)代码的 equals-free 初始化样式.