gpt4 book ai didi

c - 链表 C 程序中的段错误

转载 作者:行者123 更新时间:2023-11-30 20:10:18 24 4
gpt4 key购买 nike

我正在尝试创建一个包含 10 个节点的列表,并分配值 1 到 10 并打印它们。我用下面的代码尝试了它,但最终出现了段错误。

我对 C 语言的链接列表非常陌生。

#include<stdio.h>
typedef struct Node
{
int data;
struct Node *next;
}Node_Struct;

int main(void)
{
int i =0;
Node_Struct* Node = NULL;
Node = (Node_Struct*)malloc(sizeof(Node_Struct));

for (i = 1; i<=10; i++){
Node->data = i;
Node = Node->next;
}

for (i = 1; i<=10; i++){
printf("\n Node->data:%d",Node->data);
Node = Node->next;
}
return 0;
}

最佳答案

正如评论中的人们所指出的,您仅将内存分配给头节点。您还需要为尝试添加 int for 循环的每个节点分配内存。此外,您在每次迭代时都会向前移动 Node 指针,因此插入后您将无法遍历列表。跟踪列表的头部和尾部。执行以下操作:

维护链表的头和尾:

 Node_Struct* headNode = NULL, *tailNode = NULL;
// head node
headNode = tailNode = (Node_Struct*)malloc(sizeof(Node_Struct));

在循环中的每次迭代时分配内存。是否要在头节点中保留某些内容是您的愿望。因此,将 for 循环中的代码更改如下:

for (i = 1; i<=10; i++) {
Node_Struct* newNode = (Node_Struct *)malloc(sizeof(Node_Struct));

newNode->data = i;
newNode->next = NULL;

tailNode->next = newNode;
tailNode = newNode;
}

之后,您可以通过复制其他变量中的 head 值来迭代列表:

  Node_Struct *tmpNode = headNode;
for (i = 1; i<=10; i++){
printf("\n Node->data:%d",tmpNode->data);
tmpNode = tmpNode->next;
}

关于c - 链表 C 程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587692/

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