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

C语言单链表打印多输出一个随机值的问题排查

问题根源

你的链表创建逻辑多生成了1个未赋值的尾节点,遍历到该节点时就会输出x字段的随机垃圾值,具体问题如下:

  • 你提前为root申请了内存,之后for循环每处理1个元素的逻辑是:先给当前节点的next申请新节点内存 → 给当前节点的x赋值 → 指针跳到新申请的空节点上。输入N个元素后,链表总长度为N+1:前N个节点的x是你输入的有效值,最后1个节点只有next被置为NULL,x从未赋值,所以输出会多一个随机值。
  • 额外的语法问题:你typedef定义的node是struct emp*类型,代码里malloc时强转为struct node *是错误的,C语言中不存在struct node这个结构体类型,要么去掉强转,要么改为(node)/(struct emp *)。
修正后的代码
struct emp {
    int x;
    struct emp* next;
};
typedef struct emp* node;

int main(){
    int elemanSayisi;
    struct emp *root,*iter;
    printf("enter number of elements: ");
    scanf("%d",&elemanSayisi);
    // 先给头节点申请内存,避免循环中多生成冗余节点
    root = malloc(sizeof(struct emp));
    iter=root;
    for(int i=0;i<elemanSayisi;i++){
        printf("\n%d. enter the element: ",i+1);
        scanf("%d",&iter->x);
        // 仅非最后一个元素时才申请下一个节点
        if(i != elemanSayisi - 1) {
            iter->next = malloc(sizeof(struct emp));
            iter = iter->next;
        } else {
            iter->next = NULL;
        }
    }
    int b=1;
    iter=root;
    while(iter!=NULL){
        printf("\n%d. element: %d",b,iter->x);
        iter=iter->next;
        b++;
    }
    // 实际使用时建议补充链表内存释放逻辑,避免内存泄漏
    return 0;
}
验证逻辑

修正后输入N个元素时,链表恰好有N个节点,尾节点的next置为NULL,不会出现多余的未赋值节点,输出不会再有随机值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:54:05