Ik heb een klein probleem dat probeert in Malloc deze struct.
Hier is de code voor de structuur:
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;
en hier is de code waar ik een probleem heb met:
dungeon d1 = (dungeon) malloc(sizeof(dungeon));
Het geeft me de foutmelding “Fout: Conversion to Non-Scalar Type gevraagd”
Kan iemand me helpen begrijpen waarom dit is?
Antwoord 1, Autoriteit 100%
U kunt niets naar een structuurtype werpen. Wat ik aanneem dat u wilt schrijven is:
dungeon *d1 = (dungeon *)malloc(sizeof(dungeon));
Geef de retourwaarde van malloc()
in een C-programma niet uit.
dungeon *d1 = malloc(sizeof(dungeon));
Werkt prima en zal #include
bugs niet voor je verbergen.
Antwoord 2, autoriteit 9%
malloc
retourneert een aanwijzer, dus waarschijnlijk is wat je wilt het volgende:
dungeon* d1 = malloc(sizeof(dungeon));
Zo ziet malloc eruit:
void *malloc( size_t size );
Zoals je kunt zien, retourneert het void*
, maar je mag de retourwaarde niet casten.
Antwoord 3
Het geheugen toegewezen door malloc
moet worden opgeslagen in een aanwijzer naar een object, niet in het object zelf:
dungeon *d1 = malloc(sizeof(dungeon));