間違いなく私の考えの誤りによる問題を抱えていますが、頭を抱えているようには見えません。私は次のような構造体を持っています:
typedef struct
{
ALLEGRO_BITMAP *bitmap;
char name[255];
signed int step; // How many frames to move per cycle. Negative values will cause the animation to reverse. Affects "current" frame only.
ANNE_SPRITE_CYCLES cycles;
ANNE_SPRITE_ANIMATIONS anim;
ANNE_SPRITE_FRAME current;
} ANNE_SPRITE;
malloc() してからすぐに解放すると、すべて問題ありません。
ANNE_SPRITE *sprite = malloc(sizeof(ANNE_SPRITE));
free(sprite);
printf("Haven't crashed yet, boss!");
ただし、関数内に構造体を構築すると、次のようになります。
ANNE_SPRITE anne_sprite_load(char sprite_name[]){
ANNE_SPRITE *sprite = malloc(sizeof(ANNE_SPRITE));
//Snipped: a bunch of code to populate the struct with data
return *sprite;
}
次に、愛やお金の呼び出しコンテキストで構造体の割り当てを解除できません。
ANNE_SPRITE test = anne_sprite_load("awesome_sprite");
free(test);
これにより、コンパイラ エラーが発生しますpassing 'ANNE_SPRITE' to parameter of incompatible type 'void *'
。実際、私は です。しかし、この変数を free() で動作する準備が整っている形式に仕上げる方法に途方に暮れています。