链表中间出现了断层(断链了)?

我感觉我的del函数没有问题,但是在我调式的时候,运行del函数和输出函数时,他会直接停止运行,然后我设置断点进行调试,发现他说是分割故障。

/*删除链表中的节点*/
void del(struct List* L,char ch[])
{
    struct List* p = L->next;
    struct List* q;
    if(!sousuo(L->next,ch)) cout<<"该学生信息不存在,无法删除!"<<endl;
    while(p!=NULL&&strcmp(p->xuehao,ch)!=0)
    {
        q = p;
        p = p->next;
    }
    if(p!=NULL&&strcmp(p->xuehao,ch)==0)
    {
        q->next = p->next;
        free(p);
        cout<<endl<<"删除成功"<<endl;
    }

}
void del(struct List* &L,char ch[])
{
    struct List* p = L->next;
    struct List* q;
    if(!sousuo(L->next,ch)) cout<<"该学生信息不存在,无法删除!"<<endl;
    if(strcmp(p->xuehao,ch)==0)
    {
        L->next = p->next;
        delete p;
        cout<<endl<<"删除成功"<<endl;
    } 
    else
    {
        while(p!=NULL&&strcmp(p->xuehao,ch)!=0)
        {
            q = p;
            p = p->next;
        }
        if(p!=NULL&&strcmp(p->xuehao,ch)==0)
        {
            q->next = p->next;
            delete p; 
            cout<<endl<<"删除成功"<<endl;
        }
    }

}

img