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

标签 c++ pointers 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.

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

最佳答案

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

关于c++ - 在 C++ for 循环的增量部分分配指针时出现奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148689/

相关文章:

arrays - 如何减少for循环中的计数器?

java - 使用 for 循环生成 TextView 不起作用?

pointers - 如何修改结构指针类型的接口(interface)值

c - 在 C 中的 for 循环中打印一次

c++ - g++ 模板类中的 undefined reference

c++ - 更改 volatile const 的值 - G++ 与 Visual Studio 2019

c - 无法将结构指针分配给内存数组

c++ - 从数组指针获取奇怪的数字

c++ - 查找数字数组中出现的特定数字的数量 (C++)

c++ - 来自原始缓冲区的 Eigen::Map'd 矩阵给出 OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG