C语言链表无法插入新值且出现段错误问题求助
C语言链表插入无输出/段错误问题修复
问题根因
- 核心问题是
add函数逻辑缺失关键步骤:完成新节点的数值赋值、后继指针绑定后,没有更新传入的头指针指向新节点,缺少*list = new_node;代码行。这就导致外层定义的first指针始终维持初始的NULL值,调用print_list时循环条件直接不成立,没有任何内容输出。 - 此前出现的段错误,是调整解引用逻辑时操作不当导致的:比如误对空指针取值、或者调用
add时没有传头指针的地址,而是直接传first空指针,最终在new_node->next = *list;行触发非法内存访问。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> typedef struct node { int value;/*data stored in the node */ struct node *next; /*pointer to the next node*/ } NODE; void add(NODE **list, int n){//add_to_list in slides NODE *new_node; new_node = malloc(sizeof(NODE)); if (new_node == NULL) { fprintf(stderr,"Error:malloc failed in add_to_front \n"); exit(EXIT_FAILURE); } new_node->value = n; new_node->next = *list; // 新增这行,更新头指针指向新节点 *list = new_node; } void print_list(NODE *list){ printf("\n=========\n"); for (;list;list=list->next){ printf("%d\t",list->value); } printf("\n=========\n"); } int main() { NODE *first=NULL; print_list(first); add(&first,10); add(&first,30); add(&first,20); add(&first,40); add(&first,30); print_list(first); // 实际使用时建议补充链表内存释放逻辑,避免内存泄漏 return 0; }
运行说明
当前实现为头插法,新节点会插入到链表头部,最终运行输出如下:
========= ========= ========= 30 40 20 30 10 =========
内容的提问来源于stack exchange,提问作者user17067764
相关产品推荐
相关产品推荐

