You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:36:03