首页 > 解决方案 > 为什么我的简单链表在第一个节点之后不起作用?

问题描述

我编写此代码以自动获取值并将它们放入链表中,但它只维护第一个并替换第二个节点中的任何新值,并且不会生成第三个、第四个或 ... 节点。

    #include <iostream>

    using namespace std;

    struct node
    {
        int a;
        struct node *next;
    }zero;

    node *first = NULL;


    int main()
    {
        int t;
        for (int i = 0;i < 10;i++)
        {
            node *n = first;
            cin >> t;
            if (first == NULL)
            {
                node temp;
                temp.a = t;
                first = &temp;
                temp.next = NULL;
            }
            else
            {
                while ((*n).next != NULL)
                {
                    n = (*n).next;
                }
                node tt;
                tt.a = t;
                (*n).next = &tt;
                tt.next = NULL;
            }
        }
    }

我插入了 28。我的第一个节点数据 = 28。我插入了 57。我的第二个节点数据 = 57。我插入了 120。我的第二个节点数据 = 120。...

标签: c++linked-list

解决方案


node temp;在复合语句中声明一个自动变量。first = &temp;赋值first为指向自动变量。

自动变量在作用域结束时自动销毁——在这种情况下是 if 语句的复合子语句。之后,first不再指向一个有效的对象——它变成了一个悬空指针。

在下一次迭代中node *n = first,然后*n在 else-branch 中,您间接使用了一个悬空指针。程序的行为是未定义的。


推荐阅读