Dream in valinor 2022-03-17 09:15 采纳率: 66.7%
浏览 171
已结题

链表中出现segmentation fault

这是一个简单创建链表和输出链表数据的程序

#include <stdio.h>
typedef struct  ListCode
{
    int data;
    struct ListCode *next;
}listcode;
void creatlist(listcode *list, int n);
void printlist(listcode *list);
int main()
{
    listcode *list;
    int n;
    printf("请输入一个非零整数");
    scanf("%d", &n);
    printf("请输入%d个数据", n);
    creatlist(list, n);
    printlist(list);
    return 0;
}
void creatlist(listcode *list, int n){
    listcode *head, *node, *end;
    head = (listcode*)malloc(sizeof(listcode));
    head = list;
    end = head;
    int i;
    for(i = 0; i < n; i++){
        scanf("%d", &node->data);
        end->next = node;
        end = node;
    }
}
void printlist(listcode *list){
    listcode *p;
    p = list;
    while(p){
        printf("%d ",p->data );
        p->next;
    }
}

在运行时在第一个函数就出错不能运行了
debug的时候在creat函数的“end->next = node”这一步出现了segmentation fault
请问应该怎么解决尼

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-03-17 10:10
    关注

    首先,本身有代码问题。
    第二 能明显感觉到你的语法逻辑可能不是很实在,缺乏一些代码沉淀吧。
    这里针对每一个 指针变量,你都要maloc后才能传参或者新建节点用->取赋值使用的。
    所以,你应该在main函数开始的时候给头节点malloc,传参给函数,这个就是链表的头节点
    然后再函数内部,每次想创建节点,都是malloc的,赋值后,加入到头节点链表中(指针变量的初始化了解一些,必须做初始化才能用,你看你函数里就没有初始化)
    再就是malloc对应的释放,再不用代码的时候要用free释放掉对应的malloc

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探