1

明らかな質問がありますが、問題に戸惑っています。

さて、まず状況の概要を説明しましょう。ゲーム内のエンティティの属性を保持するために使用されるENTITYという構造があります。最近、構造にメンバーを追加しました。プログラムは完璧に動作しますが、終了すると、「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 *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;
}

(EDIT 4/8/12)-mallocの代わりにcallocを使用しました-関数パラメーターにvoidを挿入しました-NULL_voidを削除しました-(ENTITY *)キャストを削除できませんでした、コンパイラーはvoid型を変換できなかったと文句を言います( stdlib.hが含まれていませんでしたか?)

プログラムを終了するときにENTITYを削除する方法は次のとおりです。

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