gpt4 book ai didi

c - 打印 LinkedList 时程序崩溃

转载 作者:行者123 更新时间:2023-11-30 15:02:56 25 4
gpt4 key购买 nike

我有一个 C 语言的双链表,它的节点包含一个 char*。我的节点结构如下所示:

struct LinkedListNode{
char* data;
LinkedListNode* next;
LinkedListNode* prev; };

LinkedList 的结构如下所示:

struct LinkedList{
LinkedListNode* head;
LinkedListNode* tail;};

head 是指向链表第一个节点的指针,tail 是指向链表最后一个节点的指针。我的问题是,我正在尝试编写一个函数来测试链表的一些标准函数,我正在出于实践目的而实现该函数。因此,我首先在以下函数中生成一个列表:

LinkedList* make_test_list(){
LinkedList* newlist = LinkedList_create();
printf("Hier2");
LinkedListNode n1;
LinkedListNode n2;
LinkedListNode n3;
LinkedListNode n4;
LinkedListNode n5;
n1.data = "abc";
n2.data = "def";
n3.data = "ghi";
n4.data = "pqr";
n5.data = "mno";
n1.next = &n2;
n2.next = &n3;
n2.prev = &n1;
n3.next = &n4;
n3.prev = &n2;
n4.next = &n5;
n4.prev = &n3;
n5.prev = &n4;
n5.next = NULL;
newlist->head = &n1;
newlist->tail = &n5;
return newlist;}

这似乎工作正常,因为如果我尝试在此函数内打印它,我可以重新访问每个节点的数据。LinkedList_create()包含以下代码:

LinkedList* LinkedList_create(){
LinkedList* list = malloc(sizeof(struct LinkedList));
list->head = NULL;
list->tail = NULL;
return list;
}

所以我想做的下一件事是在单独的函数中打印我的列表。该函数如下所示:

void LinkedList_print(LinkedList* list){    
LinkedListNode* p = list->head;
while(p != NULL)){
printf("%s\n", p->data);
p = p->next;
}}

但不知怎的,它不起作用。我认为我在分配指针时犯了一个错误。调用如下所示:

int main(){
LinkedList* myList = make_test_list();
printf("List before: \n");

LinkedList_print(myList);
}

如果您能帮我解决这个问题,我会很高兴,因为我对 C 语言很陌生,而且对自己管理内存分配也很陌生。

干杯!

最佳答案

您的 LinkedListNode 变量 (n1-n5) 是 make_test_list 函数的本地变量。如果您想在该函数之外访问它们,您需要为它们分配内存。

例如:

LinkedListNode *n1 = malloc(sizeof(*n1));
n1->data = "abc";
...
newlist->head = n1;
...

当然,您还想确保稍后释放内存。我还假设 LinkedList_create 已正确实现,因为此处未显示它。

关于c - 打印 LinkedList 时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915314/

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