在 C++ for 循环的增量部分分配指针时出现奇怪的编译错误
Weird compile error when assigning pointers in increment part of C++ for loop
我想用 C++ 编写一个函数,用于查找 2 个链表的交集节点。
链表的定义简单如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
我的想法是遍历 2 个列表并找到最后一个不同的节点。
所有变量都是ListNode
指针。
当我尝试将 pa = headA
和 pb = headB
放入 for 循环的递增部分时出现问题,如下所示:
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.
我以为没有发生赋值,所以指针到达了无效内存。我不知道是什么原因造成的。
第一个版本只执行循环迭代之间的行。第二个版本在每次循环迭代时执行它们。不同之处在于第二个版本在第一次迭代时执行它们,而第一个版本没有。
我想用 C++ 编写一个函数,用于查找 2 个链表的交集节点。
链表的定义简单如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
我的想法是遍历 2 个列表并找到最后一个不同的节点。
所有变量都是ListNode
指针。
当我尝试将 pa = headA
和 pb = headB
放入 for 循环的递增部分时出现问题,如下所示:
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.
我以为没有发生赋值,所以指针到达了无效内存。我不知道是什么原因造成的。
第一个版本只执行循环迭代之间的行。第二个版本在每次循环迭代时执行它们。不同之处在于第二个版本在第一次迭代时执行它们,而第一个版本没有。