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

C语言单链表程序编译通过但运行异常,求bug排查帮助

单链表代码运行异常的问题分析与修复

核心问题1:InitNode函数参数传递错误

C语言函数参数是值传递,你在InitNode里给形参n分配内存,但这个修改不会同步到外部的p变量。外部的p始终是NULL,后续访问p->data会直接触发内存访问错误。

修复方法:让InitNode返回分配好的节点指针,更直观易懂:

node* InitNode(){
    node *n = malloc(sizeof(node));
    if(n == NULL){ // 必须检查内存分配是否成功
        return NULL;
    }
    n->data = 9999;
    n->next = NULL;
    return n;
}

对应CreateListOnL里的调用修改为:

node *p = InitNode();
if(!p){
    puts("fail");
    exit(EXIT_FAILURE);
}

核心问题2:遍历链表的逻辑错误

  1. 原代码遍历循环中没有移动p指针,会导致无限循环(链表非空时);若链表为空(初始输入9999),p为NULL,访问p->next会直接崩溃。
  2. 需要先判断链表是否为空,遍历过程中每次循环要让p指向下一个节点。

修复后的遍历代码:

int i=1;
if(p == NULL){ // 处理空链表情况
    puts("链表为空");
    return 0;
}
while (p != NULL) // 遍历所有节点直到p为NULL
{
    printf("linked-list %d:%d\n", i, p->data);
    i++;
    p = p->next; // 移动指针到下一个节点
}

其他细节优化

  • malloc的返回值无需强制转换(C标准中不需要,强制转换可能隐藏类型匹配问题),直接写node *n = malloc(sizeof(node));即可。
  • 可以在main函数末尾添加return 0;,符合C语言规范。

完整修复后的代码

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

typedef int Datatype;
typedef struct singlyLinkedList
{
  Datatype data;
  struct singlyLinkedList *next; 
}node;
typedef node *linkList;

node* InitNode(){
    node *n = malloc(sizeof(node));
    if(n == NULL){
        return NULL;
    }
    n->data = 9999;
    n->next = NULL;
    return n;
}

linkList CreateListOnL(void){
    int value;
    linkList head=NULL;
    puts("if input 9999 then end");
    puts("input, please:");
    scanf("%d",&value);
    while (value!=9999)
    {
        node *p = InitNode();
        if(!p){
            puts("fail");
            exit(EXIT_FAILURE);
        }
        p->data=value;
        p->next=head;
        head=p;

        puts("input the value, please:");
        scanf("%d",&value);
    }

    return head;
}

int main(void){
    linkList L = CreateListOnL();
    node *p = L;

    int i=1;
    if(p == NULL){
        puts("链表为空");
        return 0;
    }
    while (p != NULL)
    {
        printf("linked-list %d:%d\n",i,p->data);
        i++;
        p = p->next;
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者shucha li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:22