FOUT: conversie naar niet-scalaire type gevraagde

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 #includebugs niet voor je verbergen.


Antwoord 2, autoriteit 9%

mallocretourneert 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 mallocmoet worden opgeslagen in een aanwijzer naar een object, niet in het object zelf:

dungeon *d1 = malloc(sizeof(dungeon));

Other episodes