gpt4 book ai didi

c - 遍历链表时出现段错误

转载 作者:行者123 更新时间:2023-12-05 01:54:22 25 4
gpt4 key购买 nike

我刚开始学习链表,我尝试创建一个函数,循环遍历链表并打印出每个值。

但是,在我的 while 循环结束时,当我经过最后一个节点时,我遇到了段错误。

虽然我可以通过将条件从 (temp != NULL) 设置为 (temp->next != NULL) 来消除段错误,但我仍然遇到了错误。我会在这里提供一些帮助。

我提供了出现错误的打印函数,但如果需要,我也可以提供完整的代码。

void printList(node_t *head){
node_t *temp = head;

if (temp != NULL) {
while (temp->next != NULL) {
int i = temp->value;
printf("%d\n", i);
temp = temp->next;

}
}
}

添加了更多代码。

#include <stdio.h>
#include <stdlib.h>

struct node{
int value;
struct node *next;
};

typedef struct node node_t;

void printList(node_t *head){
node_t *temp = head;

if (temp != NULL) {
while (temp->next != NULL) {
int i = temp->value;
printf("%d\n", i);
temp = temp->next;

}
}

}

node_t *create_new_node(int value){
node_t *next_pointer = malloc(sizeof(node_t));
next_pointer->value = value;
next_pointer->next = NULL;
return next_pointer;
}

node_t *insert_at_head(node_t **head, node_t *new_node){
new_node->next = *head;
*head = new_node;
return new_node;
}

int main(){
node_t *tmp, *head;

for(int i= 0; i<25; i++){
tmp = create_new_node(i);
insert_at_head(&head, tmp);
}

printList(head);

return 0;
}

最佳答案

程序的问题是你没有初始化指向头节点的指针

node_t *tmp, *head;

结果,随着新节点被添加到头部,最后一个节点的下一个数据成员具有不确定的值。

你需要写

node_t *tmp, *head = NULL;

printList 函数可以如下所示

void printList( const node_t *head )
{
for ( ; head != NULL; head = head->next )
{
printf( "%d\n", head->value );
}
}

函数 create_new_node 也应该按以下方式定义

node_t * create_new_node( int value )
{
node_t *next_pointer = malloc(sizeof(node_t));
if ( next_pointer != NULL )
{
next_pointer->value = value;
next_pointer->next = NULL;
}

return next_pointer;
}

关于c - 遍历链表时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70684956/

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