关于#野指针#的问题,如何解决?

ListNode Union(ListNode A, ListNode B) {
Node *p,*q,*r,*s,*o;
ListNode t;
ListNode D = (ListNode)malloc(sizeof(ListNode));
D->next = NULL;
r=D;
p=A->next;
q=B->next;
t=intersection(A,B);
o=t->next;
while(p!=NULL) {
s = (ListNode)malloc(sizeof(ListNode));
s->data=p->data;
s->next=r->next;
r->next=s;
r=s;
p=p->next;
}

while(q) {
    while(o) {
        if(q->data==o->data) break;
        o=o->next;
    } 
    
    if(!o) {
        s = (ListNode)malloc(sizeof(ListNode));
        s->data=q->data;
        s->next=r->next;
        r->next=s;
        r=s;
    }
    o=t->next;
    q=q->next;
}

return D;

}
为啥出现野指针了

其他看着还行,
t=intersection(A,B);
o=t->next;
这里有可能出现野指针,你确认下

ListNode是什麽类型,是节点的指针类型吗???
那s = (ListNode)malloc(sizeof(ListNode)); 这种内存申请都是错误的,sizeof(ListNode)应该改为sizeof(Node)