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
相关产品推荐
相关产品推荐

