1

ヘッダーファイルの構造体は次のとおりです。

typedef struct Missile {
    int id;
    Model *model;
    Point3D coords;
    int counter;
    float speed;
    float yaw;
    float pitch;
    float roll;
} Missile;

Cファイルのコードは次のとおりです。

#define INIT_MISSILE_ARRAY_SIZE 4

/* An array to keep track of all missiles created (fired) */
static Missile *missiles[INIT_MISSILE_ARRAY_SIZE];

/* This keeps track of the array missiles' size */
int currentArraySize = INIT_MISSILE_ARRAY_SIZE;

int numOfMissiles = 0;

Missile *CreateMissile()
{
    if (numOfMissiles < currentArraySize)
    {
        Missile *missile = malloc(sizeof(Missile));
        missile->model = LoadModelPlus("rocket1.obj");
        missile->counter = 0;
        missile->speed = 0.00;
        missile->yaw = 0.00;
        missile->pitch = 0.00;
        missile->roll = 0.00;
        missile->id = numOfMissiles;
        missiles[numOfMissiles] = missile;
        numOfMissiles++;
        printf("Missile created, numOfMissiles: %d\n", numOfMissiles);
        return missile;
    }
    printf("Too many missiles fired already.\n");
    return NULL;
}

void DeleteMissile(Missile *missile)
{
    free(missile);
}

DeleteMissile(Missile *missile)関数が呼び出されると、次のエラーが表示されます。に置き換えてみましfree(missile);free(missiles[missile->id]);。これは、ミサイルのグローバル配列で (同じ) ミサイルを検索し、そのミサイルを呼び出しfree()ます。これにより、同じエラーが発生します。この関数LoadModelPlus()は、 に malloc を使用しmissile->modelます。

誰かが私が間違っていることを見ることができますか?

4

0 に答える 0