Я хочу написать функцию в C++ о поиске узла пересечения из 2 связанных списков.Странная ошибка компиляции при назначении указателей в части приращения для C++ для цикла
Определение LinkedList является тривиальным, как сильфонные:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
Моей идея заключается в цикле по 2 спискам и найти последний иной узел.
Все переменные: ListNode
указатели.
Проблема происходит, когда я пытался поставить pa = headA
и pb = headB
вверх в приращению части для цикла, как это:
for (int i = 0; i < min_len; i++, pa = headA, pb = headB) {
while (pa->next != last_same_node) pa = pa->next;
while (pb->next != last_same_node) pb = pb->next;
if (pa != pb) break;
else last_same_node = pa;
}
Он работал хорошо, когда я положил их так:
for (int i = 0; i < min_len; i++) {
pa = headA;
pb = headB;
while (pa->next != last_same_node) pa = pa->next;
while (pb->next != last_same_node) pb = pb->next;
if (pa != pb) break;
else last_same_node = pa;
}
Сообщение об ошибке VC дало мне следующее:
First-chance exception at 0x00BD34B7 in leetcode.exe:
0xC0000005: Access violation reading location 0x00000004.
Я думал, что назначение не произошло, чтобы указатель достиг недопустимой памяти. Я понятия не имею, из-за этого.
Это не ошибка компилятора ... – deviantfan
Это исключение, вызванное вашим приложением, потому что вы пытались прочитать неустойчивое расположение памяти. Проверьте использование памяти простым чтением кода, отладчиком или valgrind. –
Это временная ошибка *. Запустите debug-build в отладчике, и отладчик остановится в месте сбоя. Затем отладчик позволит вам изучить стек вызовов функций и позволить вам подойти к стеку вызовов до тех пор, пока вы не достигнете своего кода (если вас там уже нет), где вы можете изучить значения переменных. –