J'ai un petit problème à essayer de malloc cette structure . Voici le code de la structure:
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;
Et voici le code avec lequel j'ai un problème:
dungeon d1 = (dungeon) malloc(sizeof(dungeon));
Cela me donne l'erreur "erreur: conversion en type non scalaire demandé" Quelqu'un peut-il m'aider à comprendre pourquoi?
Vous ne pouvez rien attribuer à un type de structure. Ce que je suppose que vous vouliez écrire est:
dungeon *d1 = (dungeon *)malloc(sizeof(dungeon));
Mais s'il vous plaît, ne spécifiez pas la valeur de retour de malloc()
dans un programme C.
dungeon *d1 = malloc(sizeof(dungeon));
Cela fonctionnera parfaitement et ne vous cachera pas les bugs #include
.
malloc
renvoie un pointeur. Ce que vous voulez probablement est la suivante:
dungeon* d1 = malloc(sizeof(dungeon));
Voici à quoi ressemble malloc:
void *malloc( size_t size );
Comme vous pouvez le voir renvoyer void*
, cependant vous ne devriez pas transtyper la valeur de retour .
La mémoire assignée par malloc
doit être stockée dans un pointeur sur un objet, pas dans l'objet lui-même:
dungeon *d1 = malloc(sizeof(dungeon));