我有一个明显的问题,但我对这个问题感到困惑。
好的,首先让我概述一下情况。我有一个名为 ENTITY 的结构,用于保存游戏中实体的属性。我最近在结构中添加了更多成员。该程序运行完美,但当我退出时,Windows 会弹出一个错误屏幕,显示“XXX.exe 已停止工作...在线检查解决方案...等等等等”。
因此,为了排除故障,我从 ENTITY 结构中删除了一些成员,程序运行正常并退出正常。???
(使用 Dev-cpp 编译)
编码:
typedef struct _ENTITY
{
char classname[16];
int health;
int vel_x;
int vel_y;
int direction;
int frame;
int flag;
SDL_Rect bbox;
struct _ENTITY *next;
struct _ENTITY *owner;
struct _ENTITY *goal;
void (*think) ();
float nextthink;
} ENTITY;
为实体结构分配内存的函数
ENTITY *ENTITY_spawn (void)
{
ENTITY *node, *old_node;
int i;
node = ENTITY_head; // Top of list
// Find end of list
for (i = 0; node; i++)
{
old_node = node;
node = node->next;
}
// Allocate
node = (ENTITY*)calloc (1, sizeof (ENTITY));
if (i)
old_node->next = node;
else
ENTITY_head = node;
return node;
}
(编辑 4/8/12) - 使用 calloc 而不是 malloc - 在函数参数中插入 void - 摆脱 NULL_void - 无法摆脱 (ENTITY*) 强制转换,编译器抱怨它无法转换类型 void(因为我不包括stdlib.h?)
以下是我在退出程序时删除 ENTITY(s) 的方法:
void ENTITY_cleanup (void)
{
ENTITY *node, *old_node;
node = ENTITY_head;
while (node)
{
old_node = node->next;
free (node);
node = old_node;
}
}