この構造体をmallocしようとすると、小さな問題が発生します。構造体のコードは次のとおりです。
typedef struct stats {
int strength;
int wisdom;
int agility;
} stats;
typedef struct inventory {
int n_items;
char **wepons;
char **armor;
char **potions;
char **special;
} inventory;
typedef struct rooms {
int n_monsters;
int visited;
struct rooms *nentry;
struct rooms *sentry;
struct rooms *wentry;
struct rooms *eentry;
struct monster *monsters;
} rooms;
typedef struct monster {
int difficulty;
char *name;
char *type;
int hp;
} monster;
typedef struct dungeon {
char *name;
int n_rooms;
rooms *rm;
} dungeon;
typedef struct player {
int maxhealth;
int curhealth;
int mana;
char *class;
char *condition;
stats stats;
rooms c_room;
} player;
typedef struct game_structure {
player p1;
dungeon d;
} game_structure;
そして、私が問題を抱えているコードは次のとおりです:
dungeon d1 = (dungeon) malloc(sizeof(dungeon));
「エラー:非スカラータイプへの変換が要求されました」というエラーが表示されます。
構造型には何もキャストできません。あなたが書くつもりだったと私が思うのは:
_dungeon *d1 = (dungeon *)malloc(sizeof(dungeon));
_
ただし、Cプログラムでmalloc()
の戻り値をキャストしないでください。
_dungeon *d1 = malloc(sizeof(dungeon));
_
うまく動作し、_#include
_バグを隠しません。
malloc
はポインターを返すため、おそらく次のものが必要です。
dungeon* d1 = malloc(sizeof(dungeon));
Mallocは次のようになります。
void *malloc( size_t size );
ご覧のとおり、void*
、しかしあなたは 戻り値をキャストすべきではない 。
malloc
によって割り当てられたメモリは、オブジェクト自体ではなく、オブジェクトへのポインタに保存する必要があります。
dungeon *d1 = malloc(sizeof(dungeon));