gpt4 book ai didi

C:无法使用外部函数链接双链表中的头和尾[解决问题]

转载 作者:行者123 更新时间:2023-11-30 16:02:45 28 4
gpt4 key购买 nike

我对双链表进行了简化。我的双链表是一个以头和尾为节点的结构。

有一个函数可以创建列表并返回它。在同一函数中,我执行尾节点和头节点之间的链接。问题是,当我返回列表(因此转到函数之外)时,所有链接都消失了,或者它们只是指向函数中临时创建的列表的节点。我的猜测正确吗?如果是这样我该如何绕过这个问题?

代码如下:

#include <stdio.h>

typedef struct node{ /*a node of a list*/
int number;
struct node *next;
struct node *prev;
} node;

typedef struct list{ /*the list structure that holds only the head and tail*/
node head;
node tail;
} list;

list createList(){
list newList;
newList.head.prev=NULL;
newList.head.next=&newList.tail; /*first node points to the second*/
newList.tail.prev=&newList.head; /*second node points to the first*/
newList.tail.next=NULL;
puts("--CREATE LIST FUNC--");
printf("Head element address: %p\n", &newList.head);
printf("Tail element address: %p\n", &newList.tail);
printf("Head element points here: %p\n\n\n", newList.head.next);
return newList;
}

int main(){
list numbers=createList();
puts("--MAIN FUNC--");
printf("Head element address: %p\n", &numbers.head);
printf("Tail element address: %p\n", &numbers.tail);
printf("Head element points here: %p\n", numbers.head.next);
return 0;
}

最佳答案

你的猜测是正确的;当函数结束时,newList 超出范围。该函数返回list对象的副本,但指针成员仍指向原始对象。

您需要在堆上分配一个列表并通过指针返回(记住在某个时刻释放内存),或者获取一个指向列表的指针作为参数,并修改调用者拥有的列表

关于C:无法使用外部函数链接双链表中的头和尾[解决问题],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4949995/

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