C 编写合并两个已排序链表的代码时,获取运行时加载的地址错误
使用虚拟节点添加列表l1和列表l2的较小节点。在结束时,返回指向虚拟节点旁边的位置,以获取实际合并的排序列表,但在返回dummyNode->next时获得运行时加载的地址,对于struct ListNode类型的对象没有足够的空间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) {
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;
}
由于将指向structuresizeof(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));
writedummyNode=(struct ListNode*)malloc(sizeof(*dummyNode));
这更不容易出错。您甚至可以放弃强制转换:dummyNode=malloc(sizeof(*dummyNode));