为什么这里会引发异常?(C++)

是链表L按元素奇偶分成两个表L1和L2,但是运行后会出现这种情况

img


用到的部分代码在这里:

//单链表的储存描述
typedef  int elementType;
typedef struct slNode {
    elementType data;
    struct slNode *next;
}node, *linkList;

//初始化链表
void initialList(node **pL)
{
    (*pL) = new node;
    (*pL)->next = NULL;
}

//打印函数
void print(node** L)
{
    node* p;
    p = (*L)->next;
    while (p)
    {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}

//尾插法创建单链表,打印创建结果
void createListR(node*& L)
{
    elementType x;
    node* u, * R;
    L = new node;          //申请产生头结点,头指针为L
    //或用L=(node*)malloc(sizeof(node));
    R = L;                 //设置尾指针
    cout << "请输入链表:(输入-1时结束)" << endl;
    cin >> x;              //读入键盘输入的第一个数据到变量x
    while (x != -1)        //输入-1时退出循环
    {
        u = new node;      //申请新结点
        u->data = x;       //装入数据
        u->next = NULL;    //新结点next指针置空,或用u->next=R->next;
        R->next = u;       //将新结点链接到链尾
        R = u;             //尾指针后移,以指向新的尾结点
        cin >> x;          //读入下一个键盘输入数据到变量x
    }
    cout << "您创建的链表为:" << endl;
    print(&L);             //打印链表
}

//将单链表L中的奇数项和偶数项结点分解开(元素值为奇数、偶数),分别放入新的单链表中,然后原表和新表元素同时输出到屏幕上,以便对照求解结果
void listSeparate(node* L)
{
    node* p;
    node* L1, * L2, * M, * N, * u, * t;
    p = (L)->next;
    L1 = (node*)malloc(sizeof(node));
    L2 = (node*)malloc(sizeof(node));
    M = L1;
    N = L2;
    //initialList(&L1);
    //initialList(&L2);(这里变成注释是原来加上这两个完全打印不出来元素,去掉反而能打印出来半个,但是会发生异常)
    while (p != NULL)
    {
        if (p->data % 2 == 0)
        {
            u = (node*)malloc(sizeof(node));
            u->data = p->data;
            u->next = M->next;
            M->next = u;
            M = u;
        }
        else
        {
            t = (node*)malloc(sizeof(node));
            t->data = p->data;
            t->next = L2->next;
            L2->next = t;
            L2 = t;
        }
        p = p->next;
    }
    print(&L);
    cout << "偶数项L1为:" << endl;
    print(&L1);
    cout<<"奇数项L2为:"<<endl;
    print(&L2);
    destroyList(&L1);
    destroyList(&L2);

}

求帮忙看看是哪里出了问题

调试看下,传进来的 (*L)->next,也就是 p,是不是野指针。
这里没有看到链表构建的代码