关于链表拆分出现null的问题

本人菜鸟,最近做到拆分单链表的时候,发现只能读取首节点的信息,之后next就会变成null,代码如下
真的找不到错误了。。希望大神们帮帮忙

#include "stdio.h"
#include "stdlib.h"
#define LEN sizeof(struct student)
struct student
{
    int num;
    char name[8];
    char sex[2];
    int age;
    struct student *next;
}stu[10];

int co(struct student *pa,int length)
{
    struct student *pd = NULL,*pe = NULL,*pb = NULL,*pc = NULL;
    int i;
    for(i=0;i<length;i++)
    {
        printf("...");
        pb=(struct student *)malloc(LEN);
        pc=(struct student *)malloc(LEN);
        if(pa->num>=80)
        {
            if (i==0) {
                pb=pd=pa;
                pb->next=NULL;
            }
            else
            {
                pb=pa;
                pd->next=pb;
                pb->next=NULL;
            }
        }
        else
        {
            if (i==0) {
                pc=pe=pa;
                pc->next=NULL;
            }
            else
            {
                pc=pa;
                pe->next=pc;
                pc->next=NULL;
            }
        }
        pa=pa->next;
    }
    printf(">80:   %d %s %s %d\n",pb->num,pb->name,pb->sex,pb->age);
    printf("other: %d %s %s %d\n",pc->num,pc->name,pc->sex,pc->age);
    return 0;
}


int main()
{
    struct student *p,*pt = NULL,*head = NULL;
    int i,length = 0,inum,flag=1;
    int find=0;
    while (flag==1) {
        printf("input length\n:");
        scanf("%d",&length);
        if(length<10)
            flag=0;
    }
    for(i=0;i<length;i++)
    {
        p=(struct student *)malloc(LEN);
        if (i==0)
            head=pt=p;
        else
            pt->next=p;
        pt=p;
        printf("please input the num:\n");
        scanf("%d",&p->num);
        printf("please input the name:\n");
        scanf("%s",p->name);
        printf("please input the sex:\n");
        scanf("%s",p->sex);
        printf("please input the age:\n");
        scanf("%d",&p->age);
        p->next=NULL;
    }
        p=head;
        while(p!=NULL)
        {
            printf("%d %s %s %d\n",p->num,p->name,p->sex,p->age);
            p=p->next;
        }
    printf("please input the num:\n");
    scanf("%d",&inum);
    pt=head;
    p=pt;
    if(inum==p->num)
    {
        p=p->next;
        pt=head=p;
        find=1;
    }
    else
        p=p->next;
    while (p!=NULL) {
        if(p->num==inum)
        {
            pt->next=p->next;
            find=1;
        }
        else
        {
            pt=p;
            p=pt->next;
        }
        if(!find)
            printf("no find\n");
        else
            printf("have delete\n");
        p=head;
        while (p!=0) {
            printf("%d %s %s %d\n",p->num,p->name,p->sex,p->age);
            p=p->next;
        }
    }
    p=head;
    co(p,length);
    return 0;
}

输入信息如下,

input length
:3
please input the num:
99
please input the name:
cc
please input the sex:
man
please input the age:
23
please input the num:
74
please input the name:

bb
please input the sex:
man
please input the age:
44
please input the num:
23
please input the name:
aa
please input the sex:
man
please input the age:
33
99 cc man 23
74 bb man 44
23 aa man 33
please input the num:
74
have delete
99 cc man 23
23 aa man 33
......(lldb) 

报错信息如下:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

如果问题得到解决,请点下我回答左上角的采纳

// Q764119.cpp : This file contains the 'main' function. Program execution begins and ends there.
//


#define _CRT_SECURE_NO_WARNINGS

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define LEN sizeof(struct student)
struct student
{
    int num;
    char name[20];
    char sex[10];
    int age;
    struct student* next;
}stu[10];

int co(struct student* pa, int length)
{
    struct student* pd = NULL, * pe = NULL, * pb = NULL, * pc = NULL;
    int i;
    for (i = 0; i < length; i++)
    {
        printf("...");
        pb = (struct student*)malloc(LEN);
        pc = (struct student*)malloc(LEN);
        if (pa->num >= 80)
        {
            if (pd == NULL) {
                pd = pb;
                pb->num = pa->num;
                strcpy(pb->name, pa->name);
                strcpy(pb->sex, pa->sex);
                pb->age = pa->age;
                pb->next = NULL;
            }
            else
            {
                pb->num = pa->num;
                strcpy(pb->name, pa->name);
                strcpy(pb->sex, pa->sex);
                pb->age = pa->age;
                pd->next = pb;
                pb->next = NULL;
            }
        }
        else
        {
            if (pe == NULL) {
                pe = pc;
                pc->num = pa->num;
                strcpy(pc->name, pa->name);
                strcpy(pc->sex, pa->sex);
                pc->age = pa->age;
                pc->next = NULL;
            }
            else
            {
                pc->num = pa->num;
                strcpy(pc->name, pa->name);
                strcpy(pc->sex, pa->sex);
                pc->age = pa->age;
                pe->next = pc;
                pc->next = NULL;
            }
        }
        pa = pa->next;
    }
    pb = pd;
    while (pb != NULL)
    {
        printf(">80:   %d %s %s %d\n", pb->num, pb->name, pb->sex, pb->age);
        pb = pb->next;
    }
    pc = pe;
    while (pc != NULL)
    {
        printf("other: %d %s %s %d\n", pc->num, pc->name, pc->sex, pc->age);
        pc = pc->next;
    }
    return 0;
}


int main()
{
    struct student* p, * pt = NULL, * head = NULL;
    int i, length = 0, inum, flag = 1;
    int find = 0;
    while (flag == 1) {
        printf("input length:\n");
        scanf("%d", &length);
        if (length < 10)
            flag = 0;
    }
    for (i = 0; i < length; i++)
    {
        p = (struct student*)malloc(LEN);
        if (i == 0)
            head = pt = p;
        else
            pt->next = p;
        pt = p;
        printf("please input the num:\n");
        scanf("%d", &p->num);
        printf("please input the name:\n");
        scanf("%s", p->name);
        printf("please input the sex:\n");
        scanf("%s", p->sex);
        printf("please input the age:\n");
        scanf("%d", &p->age);
        p->next = NULL;
    }
    p = head;
    while (p != NULL)
    {
        printf("%d %s %s %d\n", p->num, p->name, p->sex, p->age);
        p = p->next;
    }
    printf("please input the num:\n");
    scanf("%d", &inum);
    pt = head;
    p = pt;
    if (inum == p->num)
    {
        p = p->next;
        pt = head = p;
        length--;
        find = 1;
    }
    else
        p = p->next;
    while (p != NULL) {
        if (p->num == inum)
        {
            pt->next = p->next;
            length--;
            find = 1;
            p = pt->next;
        }
        else
        {
            pt = p;
            p = pt->next;
        }
    }
    if (!find)
        printf("no find\n");
    else
        printf("have delete\n");
    p = head;
    while (p != 0) {
        printf("%d %s %s %d\n", p->num, p->name, p->sex, p->age);
        p = p->next;
    }
    p = head;
    co(p, length);
    return 0;
}

图片说明