gpt4 book ai didi

c - 链表函数-C

转载 作者:行者123 更新时间:2023-11-30 20:46:38 25 4
gpt4 key购买 nike

我正在尝试编写一个从数组创建链接列表的函数:

typedef struct {
char airplane_name[AIRPLANE_NAME_MAX_LENGTH];
char airplane_model[MODEL_LENGTH];
float age;
struct plane *next_plane;
} plane;

int CreateAirplaneList(plane **plane_input_output) {
plane plane_name_arr[NUM_OF_PLANES] = { {"Beit-Shean", "737", 5}, {"Ashkelon", "737", 10.25}, {"Hedera", "737", 3},
{"Kineret", "737", 7.5},{"Naharia", "737", 1}, {"Tel-Aviv", "747", 20}, {"Haifa", "747", 15}, {"Jerusalem","747",17},
{"Ashdod", "787", 1}, {"Bat Yam","787", 1.5}, {"Rehovot", "787", 0.5} };

plane *new_plane = NULL, *list=NULL;

int i = 0;
for (i = 0; i < NUM_OF_PLANES;i++) {
new_plane = (plane*)malloc(sizeof(plane));
if (new_plane == NULL) {
printf("Memory allocation failed\n");
return FAILURE;
};
new_plane = &plane_name_arr[i];
printf("name%d:%s\n", i, new_plane->airplane_name);
new_plane->next_plane = list;
list = new_plane;
printf("new name%d:%s\n", i, list->airplane_name);
}
printf("all good");
*plane_input_output = list;
return SUCCESS;
};

当使用 NULL 作为参数在 main() 上运行它时,它会卡住。

int main(){
plane **x = NULL;
CreateAirplaneList(x);
return 0;
}

有什么想法吗?

最佳答案

只需阅读代码并猜测它应该做什么,我就可以看到这些内容:

new_plane = &plane_name_arr[i];

上面的代码将数组中元素的地址写入new_plane并丢弃您刚刚分配的指针。您可能想要将plane_name_arr[i]中的值复制到新内存中。

*new_plane = plane_name_arr[i];

您提到您从 main 中使用 NULL 调用该方法。当您在方法结束时写入该内存时,这也不起作用。

*plane_input_output = list;

这需要有一些可以写入的内存。

这样调用它:

int main(int argc, char *argv[]) {
plane *head = NULL;
CreateAirplaneList(&head);
}

确保 CreateAirplaneList 末尾的写入实际上可以将结果写入某处。

你的方法int CreateAirplaneList(plane **plane_input_output)将指向指针的指针作为参数。如果你像这样调用它:

plane **x = NULL;
CreateAirplaneList(x);

您将传入 NULL 值。这意味着最后的写入尝试写入 NULL。由于您想要将链表传递到方法之外,因此您需要为该方法提供一个可以写入结果的地址。

因此,您创建了一个所需类型的变量。在本例中,plane *head; 然后将该变量的地址传递给方法 CreateAirplaneList(&head),以便当 *plane_input_output = list code> 将其写入到 main 中的 head 内存中。

其中可能还有更多我在快速查看时没有看到的错误。祝你好运。

关于c - 链表函数-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121200/

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