这串代码用dev c++调试提示program received signal sigsegv问题

楼主在做LeetCode做两数相加时出现了这个问题

img
在LeetCode上传的代码如下

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* p1,*p2,*head;
    int n1 = 0,n2 = 0,t1 = 0,t2 = 0,i = 0,j = 0;
    //初始化指针
    head = p1 = p2 =(struct ListNode*)malloc(sizeof(struct ListNode));
    p2->val = 0;
    p2->next = NULL;
    //循环开始
    while(l1 != NULL || l2 != NULL){//两个指针l1l2指向的都不为NULL则继续做加法
        n1 = 0;
        n2 = 0;
        if(l1 != NULL)//l1指向val的值赋予n1
        {
            n1 = l1->val;
        }
        if(l2 != NULL)//l2指向val的值赋予n2
        {
            n2 = l2->val;
        }
        //初始化下一个指针动态指针p1
        p1 = (struct ListNode*)malloc(sizeof(struct ListNode));
        p1->val = 0;
        p1->next =NULL;
        p2->val = p2->val + n1 +n2 ;//链表两数之和
        if(p2->val>9)//和大于9则取余进位
        {
            p2->val %= 10;
            p1->val = 1;
        }
        p2->next = p1;
        p2 = p1;
        if(l1 != NULL){
            l1 = l1->next;
        }
        if(l2 != NULL){
            l2 = l1->next;
        }
    }
    if(p1->val == 0)
    {
        p1 = NULL;
    }    
    return head;
}

楼主自己用笔推演了一遍3位数+3位数的和,表面逻辑上没发现问题。
将这段代码用Dev c++调试出现了program received signal sigsegv提示。

LeetCode上执行结果如下
img