gpt4 book ai didi

c - 我的代码中存在段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:19 25 4
gpt4 key购买 nike

我有以下代码:

main()
{
struct passenger_node {
char *name;
struct passenger_node *next;
};

struct flight {
char airline[MAXNAME];
int number;
struct passenger_node *passengers;
};

// New passengers are added to the front of the list of passengers.
void add_passenger(char *name, struct flight *flp) {
struct passenger_node n;
n.name = malloc(strlen(name)+1);
strncpy(n.name, name, strlen(name)+1);
n.next = flp->passengers;
};

void list_passengers(struct flight fl) {
printf("%s", fl.passengers->name);
}

struct flight my_flight;
strcpy(my_flight.airline, "Air");
my_flight.number = 111;
my_flight.passengers = NULL;
add_passenger("MMM", &my_flight);
list_passengers(my_flight);
}

我在函数 list_passengers 中的行 fl.passengers->name 出现段错误?谁能告诉我这是为什么?

最佳答案

您的 add_passenger 无法更新 passengers 指针:

void add_passenger(char *name, struct flight *flp) {
struct passenger_node n;
n.name = malloc(strlen(name)+1);
strncpy(n.name, name, strlen(name)+1);
n.next = flp->passengers;
flp->passengers = ???; //<--- UPDATE HERE
};

您将不得不为此动态分配 passenger_node 并且不能使用本地节点。

void add_passenger(char *name, struct flight *flp) {
struct passenger_node *np = malloc(sizeof(struct passenger_ndoe));
if (!np) return;

np->name = malloc(strlen(name)+1);
strncpy(np->name, name, strlen(name)+1);
np->next = flp->passengers;
flp->passengers = np;
};

您的 list_passengers 也不正确。它只显示第一位乘客,不检查空乘客列表:

void list_passengers(struct flight fl) {
struct passenger_node *np;

for ( np = fl.passengers; np != NULL; np = np->next )
printf("%s\n", np->name);
}

关于c - 我的代码中存在段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com