2012-03-05 38 views
0

私が取り組んでいるビデオゲームの構造では、構造体「ダンジョン」内に構造体「部屋」を割り当てる必要があります。残念ながら、私は必要なすべての情報を入れるのに十分なメモリを割り当てることはできません。ここに私のデータ構造のサンプルがあります:Segfault。構造体内の構造体にメモリを割り当てる

typedef struct monster { 
    int difficulty; 
    char *name; 
    char *type; 
    int hp; 
} monster; 

typedef struct rooms { 
    int n_monsters; 
    int visited; 
    struct rooms *nentry; 
    struct rooms *sentry; 
    struct rooms *wentry; 
    struct rooms *eentry; 
    monster *monsters; 
} rooms; 

typedef struct dungeon { 
    char *name; 
    int n_rooms; 
    rooms *rm; // Subject to change 
    rooms sroom; 
} dungeon; 

これは私が私のセグメンテーションフォールトを得ている場所です。

d->name = "Dungeon 1"; 
d->n_rooms = 10; 
rooms *room = malloc(d->n_rooms * sizeof(rooms)); 

// Room 0 
room[0].n_monsters = 1; 
room[0].visited = 0; 
*room[0].sentry = room[1]; // xCode is showing the seg-fault here 

// Room 2 
room[1].n_monsters = 1; 
room[1].visited = 0; 
*room[1].nentry = room[0]; 

d->rm = room; 

なぜseg-faultですか?私は十分なメモリを割り当てていますか?

答えて

1

room[0].sentryのメモリを割り当てていません。試してみてください。また

room[0].sentry = malloc(sizeof *room[0].sentry); 
*room[0].sentry = ... 

、あなただけ(あなたのケースでより良い働くだろう場合、私は思う)のポインタを割り当てることができます:

room[0].sentry = &room[1]; 
+0

ありがとうございました!これは多くの助けとなりました。しかし、1つの質問では、ポインタを割り当てることで、別々の部屋すべてに十分なメモリを割り当てられますか? – atb

+0

@alexthebakeポインタ 'room [0] .sentry'と' room [1] 'を同じものに割り当てることで、だから1つを変えれば、もう1つに反映されます。 – cnicutar

関連する問題