C 编写合并两个已排序链表的代码时,获取运行时加载的地址错误

C 编写合并两个已排序链表的代码时,获取运行时加载的地址错误,c,data-structures,linked-list,C,Data Structures,Linked List,使用虚拟节点添加列表l1和列表l2的较小节点。在结束时,返回指向虚拟节点旁边的位置,以获取实际合并的排序列表,但在返回dummyNode->next时获得运行时加载的地址,对于struct ListNode类型的对象没有足够的空间 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { if (l1 == NULL && l2 != NULL) {

使用虚拟节点添加列表l1和列表l2的较小节点。在结束时,返回指向虚拟节点旁边的位置,以获取实际合并的排序列表,但在返回dummyNode->next时获得运行时加载的地址,对于struct ListNode类型的对象没有足够的空间

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
        if (l1 == NULL && l2 != NULL) {
                return l2;
        }
        if (l1 != NULL && l2 == NULL) {
                return l1;
        }
        struct ListNode *dummyNode = NULL;
        struct ListNode *head = NULL;

        dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode *));
        head = dummyNode;

        while (l1 != NULL && l2 != NULL) {
                if (l1->val <= l2->val) {
                        head->next = l1;
                        l1 = l1->next;
                        head = head->next;
                }
                else {
                        head->next = l2;
                        l2 = l2->next;
                        head = head->next;
                }
        }
        if (l1 != NULL) {
                head->next = l1;
        }
        if (l2 != NULL) {
                head->next = l2;
        }    
        return dummyNode->next;
}


struct ListNode*mergetwolist(struct ListNode*l1,struct ListNode*l2){
if(l1==NULL&&l2!=NULL){
返回l2;
}
如果(l1!=NULL&&l2==NULL){
返回l1;
}
结构ListNode*dummyNode=NULL;
结构ListNode*head=NULL;
dummyNode=(struct ListNode*)malloc(sizeof(struct ListNode*));
头部=dummyNode;
while(l1!=NULL&&l2!=NULL){
如果(l1->val){
head->next=l1;
l1=l1->next;
头部=头部->下一步;
}
否则{
head->next=l2;
l2=l2->next;
头部=头部->下一步;
}
}
如果(l1!=NULL){
head->next=l1;
}
如果(l2!=NULL){
head->next=l2;
}    
返回dummyNode->next;
}

由于将指向structure
sizeof(struct ListNode*)的指针传递给malloc sizeof,因此分配的空间不足。
。 应改为为为整个结构分配空间-

dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode));

我认为malloc有错误的参数-它应该是
sizeof(struct ListNode)
而不是
sizeof(struct ListNode*)
请阅读以下内容:然后阅读您的问题,并提供触发问题的最小输入。补充第一条注释:而不是
dummyNode=(struct ListNode*)malloc(sizeof(struct ListNode));
write
dummyNode=(struct ListNode*)malloc(sizeof(*dummyNode));
这更不容易出错。您甚至可以放弃强制转换:
dummyNode=malloc(sizeof(*dummyNode));