mojilnm 2021-09-03 22:00 采纳率: 0%
浏览 43

求大家看一下C语言出现段错误的原因!


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

typedef struct LNode{
    int date;
    int length;
    struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList *L);
void InsertList(LinkList *L,int N);
void Turn(LinkList *L);
int DeleteThree(LinkList *L);

int main(){
    int N,k;
    scanf("%d",&N);
    LinkList L;
    InitList(&L);
    InsertList(&L,N);
    Turn(&L);
    k=DeleteThree(&L);
    printf("%d",k);
    return 0;
}

void InitList(LinkList *L){
    *L=(LNode*)malloc(sizeof(LNode));
    (*L)->next=NULL;
}

void InsertList(LinkList *L,int N){
    LinkList s;
    int i;
    for(i=N;i>=1;i--){
        s=(LNode*)malloc(sizeof(LNode));
        s->date=i;
        s->next=(*L)->next;
        (*L)->next=s;
        (*L)->length++;
    }
}

void Turn(LinkList *L){
    LinkList p=*L;
    while(p->next!=NULL){
        p=p->next;
    }
    p->next=(*L)->next;
}

int DeleteThree(LinkList *L){
    int i;
    LinkList p;
    LinkList q;
    p=(*L)->next;
    do{
        p=p->next;
        q=p->next;
        p=q->next;
        free(q);
        (*L)->length--; 
    }while((*L)->length!=2);
    return p->next->date;
}

PTA的一道题目,编译成功,但是出现段错误,请带佬帮一下,编码入门,请求帮助!!

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-09-03 22:19
    关注

    你这DeleteThree和Turn函数的目的是什么呢?
    InitList函数中应该为*L的data和length赋予初始值0
    错误在DeleteThree上,free(q)肯定有问题,q释放后,链表就断了啊

    评论

报告相同问题?

问题事件

  • 创建了问题 9月3日

悬赏问题

  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme
  • ¥15 为什么我明明有这个文件调试器还显示错误?
  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信