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

C语言实现链表功能输出异常随机值,该如何排查修复代码问题?

问题修复说明

你的代码存在两处核心逻辑错误,直接修改即可解决随机值输出问题:

  • 变量名误用:sonaekle函数内你创建的新节点变量名为sonaeklenecek,但两处赋值操作都错误写为了函数名sonaekle,相当于把函数地址赋值给了链表节点指针,读取sayi字段时拿到的就是非法内存的随机值。
  • 尾插逻辑位置错误:给尾部节点的sonraki赋值的操作被你写在了while循环内部,还没遍历到链表尾部就会提前修改中间节点的后继指针,直接破坏链表结构。

修正后的完整代码

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

struct node{
    int sayi;
    struct node* sonraki;
};

struct node* baslangic = NULL;

struct node* olustur(int sayi){
    struct node* yenidugum = (struct node*)malloc(sizeof(struct node));
    yenidugum->sayi = sayi;
    yenidugum->sonraki = NULL;
    return yenidugum;
}

void sonaekle(int sayi){
    struct node* sonaeklenecek = olustur(sayi);
    if(baslangic == NULL){
        // 修正:把sonaekle改为正确的新节点变量名sonaeklenecek
        baslangic = sonaeklenecek;
    }
    else
    {
        struct node* temp = baslangic;
        while(temp->sonraki != NULL){
            temp = temp->sonraki;
        }
        // 修正:赋值操作移出循环,同时修改变量名
        temp->sonraki = sonaeklenecek;
    }
}

void yazdir(){
    struct node* temp = baslangic;
    while(temp != NULL){
        printf("%d =>",temp->sayi);
        temp = temp->sonraki;
    }
}

int main()
{
    int secim, sayi;
    while(1){
        printf("1-Sona eleman ekle.....\n");
        printf("Yapmak istediginiz secimi yapin...\n");
        scanf("%d",&secim);
        switch(secim){
        case 1:
            printf("Hangi elemani ekleyeceksiniz..\n");
            scanf("%d",&sayi);
            sonaekle(sayi);
            yazdir();
            printf("\n"); // 可选添加,优化输出格式
            break;
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:03