所以,我正在尝试为我的班级制作一张地图,我正在练习自己尝试实施一个嵌套循环,看看我是否采取了“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..
}
答案 0 :(得分:3)
那是因为ROAD->next_city
没有指向有效的地址,它是一个悬垂的指针。
尝试以下方法:
road *ROAD = malloc(sizeof(road));
city *next_city = malloc(sizeof(city));
ROAD->next_city = next_city;
这是你原本打算做的吗?
另请注意,您应free
malloc
通过{{1}}获得的记忆。