在 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 = headApb = 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.

我以为没有发生赋值,所以指针到达了无效内存。我不知道是什么原因造成的。

第一个版本只执行循环迭代之间的行。第二个版本在每次循环迭代时执行它们。不同之处在于第二个版本在第一次迭代时执行它们,而第一个版本没有。