Мне даны два связанных списка, представляющих два неотрицательных числа. Цифры хранятся в обратном порядке, и каждый из их узлов содержит одну цифру. Я должен написать код, который добавляет два числа и возвращает его как связанный список (в обратном порядке также).Почему мой код приводит к ошибке выполнения?
Я написал следующий код. Он отлично работает, пока последняя цифра не равна 9. Похоже, что это проблема распределения памяти, но я не могу понять, что.
Может ли кто-нибудь предположить, что не так, и как его исправить?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
void adder(int &value, bool &carry) {
if(carry) value++;
if (value > 9) {
value = value%10;
carry = true;
}else carry = false;
}
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* prev = NULL;
bool carry = false;
ListNode* curr1 = l1;
ListNode* curr2 = l2;
ListNode* worker = NULL;
while(curr1 != NULL && curr2 != NULL){
curr1 = curr1->next;
curr2 = curr2->next;
}
if(curr1 != NULL) worker = l1;
else worker = l2;
ListNode* result = worker;
curr1 = l1;
curr2 = l2;
while(curr1 != NULL && curr2 != NULL) {
int value = curr1->val + curr2->val ;
adder(value, carry);
worker->val = value;
//cout<<curr1->val<<endl;
curr1 = curr1->next;
curr2 = curr2->next;
prev = worker ;
worker = worker->next;
}
while(worker != NULL && carry) {
int value = worker->val;
adder(value, carry);
worker->val = value;
prev = worker;
worker = worker->next;
}
ListNode last(1);
//the following line results in runtime error
if(carry) {
prev->next = &last;
}
return result;
}
};
Правильный инструмент, используемый для выяснения этого, является вашим отладчиком. В крайнем случае вы могли бы определить, какая строка вызывает ошибку. – UnholySheep
Взятие адреса локальной переменной - это рецепт катастрофы (& last). Он будет недопустим за пределами области, в которой он объявлен. – crashmstr
Вы действительно думаете, что это хорошая идея добавить указатель на локальную переменную, которая уходит, когда подпрограмма выходит из конца связанного списка? – infixed