2012-06-05 4 views
1

Итак, я пытаюсь создать карту для своего класса, я практиковал себя, пытаясь реализовать вложенный цикл, чтобы увидеть, беру ли я «NewYork ---- 250 км ---- «LosAngeles», я должен был бы дать NewYork как прежнее название города и LosAngeles в качестве следующего названия города. Расстояние составляет 250 км. Я беру память для названия города, дороги и города, но после того, как я печатаю с клавиатуры для части «next_city», я получаю segfault. Может кто-то, пожалуйста, помогите мне, что я делаю неправильно?Выделение памяти для вложенной структуры, segfault

typedef struct road road; 
typedef struct city city; 

struct city{ 
    int visited; 
    int distance; 
    int path; 
    char *city_name; 

}; 

struct road{ 
    int km; 
    struct city *next_city, *previous_city; 
}; 

int main() 
{ 

    char *a=malloc(sizeof(char)*10); 
    char *b=malloc(sizeof(char)*10); 

    city *NewYork = malloc(sizeof(city)); 
    NewYork->city_name = fgets(a,10,stdin); //this gives no error 

    road *ROAD = malloc(sizeof(road)); 
    city *next_city = malloc(sizeof(city)); //to see if I can get a memory for LosAngeles 

    ROAD->next_city->city_name = fgets(b,10,stdin); //but here it gives a segfault after I type the name to terminal.. 

} 

ответ

3

Это потому, что ROAD->next_city не указывает на действительный адрес, это оборванных указатель.

Попробуйте следующее:

road *ROAD = malloc(sizeof(road)); 
city *next_city = malloc(sizeof(city)); 
ROAD->next_city = next_city; 

Является ли это то, что вы изначально намеревались сделать?

Также обратите внимание, что вы должны free приобретенную вами память через malloc.

+0

Как я должен это работать, мой мозг не работает правильно знаю, поэтому можете ли вы объяснить более подробно – Karavana

+0

@ user1128905 вы выделили память для структуры 'путь', но не для внутреннего указателя, который вы пытаетесь назначить в. –

+0

@ user1128905 также, программирование лучше всего сделать с четкой головой. То, что вы напишете через 2 часа, вы, вероятно, сможете сделать через 5 минут завтра утром, когда ваш мозг функционирует :) –

Смежные вопросы