明らかな質問がありますが、問題に戸惑っています。
さて、まず状況の概要を説明しましょう。ゲーム内のエンティティの属性を保持するために使用される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;
}
}