c-错误:请求转换为非标量类型



我在尝试对这个结构进行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));

它给了我错误"error:请求转换为非标量类型"有人能帮我理解为什么会这样吗?

不能将任何内容强制转换为结构类型。我想你想写的是:

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));

相关内容

  • 没有找到相关文章

最新更新