在 for 循环的增量部分中分配指针时出现奇怪的编译错误C++

Weird compile error when assigning pointers in increment part of C++ for loop

本文关键字:编译 C++ 错误 分配 循环 for 量部 指针      更新时间:2023-10-16

我想在C++中编写一个关于查找 2 个链表的交集节点的函数。

linkedlist的定义如下:

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.

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

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