1

我有一个明显的问题,但我对这个问题感到困惑。

好的,首先让我概述一下情况。我有一个名为 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;
    }
}
4

0 回答 0