webentwicklung-frage-antwort-db.com.de

Fehler: Die Konvertierung in einen nicht-skalaren Typ wurde angefordert

Ich habe ein kleines Problem beim Versuch, diese Struktur zu malloc_en. Hier ist der Code für die Struktur:

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;

Und hier ist der Code, mit dem ich ein Problem habe:

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

Es gibt mir den Fehler "Fehler: Konvertierung in einen nicht-skalaren Typ angefordert" Kann mir jemand helfen zu verstehen, warum das so ist?

11
atb

Sie können nichts in einen Strukturtyp umwandeln. Ich nehme an, Sie wollten schreiben:

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

Bitte konvertieren Sie nicht den Rückgabewert von malloc() in einem C-Programm.

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

Funktioniert einwandfrei und verdeckt keine #include-Fehler vor Ihnen.

13
Carl Norum

malloc gibt einen Zeiger zurück. Sie möchten also wahrscheinlich Folgendes:

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

So sieht Malloc aus:

void *malloc( size_t size );

Wie Sie sehen können, wird void* zurückgegeben, jedoch der Rückgabewert sollte nicht umgewandelt werden .

2
Jesse Good

Der von malloc zugewiesene Speicher muss in einem Zeiger auf ein Objekt gespeichert werden, nicht im Objekt selbst:

dungeon *d1 = malloc(sizeof(dungeon));
0
Adam Liss