Использование фиктивного узла для добавления меньшего узла списка l1 и списка l2. В конце возвращает местоположение, указывающее рядом с фиктивным узлом, чтобы получить фактический объединенный отсортированный список, но получает во время выполнения загрузку адреса с недостаточным пространством для объекта типа struct ListNode при возврате dummyNode->next.
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;
}
Пожалуйста, прочитайте это: Как спросить, а затем редактировать ваш вопрос и предоставьте минимальный воспроизводимый пример, а также минимальные данные, которые вызывают проблему.
Дополнение к 1-му комментарию: вместо dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode));
напишите dummyNode = (struct ListNode *)malloc(sizeof(*dummyNode));
, который менее подвержен ошибкам. Вы даже можете отказаться от актерского состава: dummyNode = malloc(sizeof(*dummyNode));
Выделено недостаточно места из-за передачи в malloc указателя sizeof на структуру sizeof(struct ListNode *)
.
Его следует изменить на выделение места для всей структуры -
dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode));
Я думаю, что у malloc неправильный параметр - он должен быть
sizeof(struct ListNode)
вместоsizeof(struct ListNode *)
.