为嵌套结构分配内存,segfault

时间:2012-06-05 21:03:41

标签: c memory nested structure

所以,我正在尝试为我的班级制作一张地图,我正在练习自己尝试实施一个嵌套循环,看看我是否采取了“NewYork ---- 250km ------ LosAngeles”的道路,我应该能够将NewYork作为以前的城市名称,并将LosAngeles作为下一个城市名称。距离是250公里。我正在为城市名称,道路和城市记忆,但在我从键盘输入“next_city”部分后,我得到了段错误。有人可以帮我解决我的错误吗?

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..

}

1 个答案:

答案 0 :(得分:3)

那是因为ROAD->next_city没有指向有效的地址,它是一个悬垂的指针。

尝试以下方法:

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

这是你原本打算做的吗?

另请注意,您应free malloc通过{{1}}获得的记忆。