C++ 为什么我的简单链表没有';第一个节点后不工作?

C++ 为什么我的简单链表没有';第一个节点后不工作?,c++,linked-list,C++,Linked List,我写这段代码是为了自动获取值并将它们放在一个链表中,但它只维护第一个值并替换第二个节点中的任何新值,而不会使第三个、第四个或。。。节点 #include <iostream> using namespace std; struct node { int a; struct node *next; }zero; node *first = NULL; int main() {

我写这段代码是为了自动获取值并将它们放在一个链表中,但它只维护第一个值并替换第二个节点中的任何新值,而不会使第三个、第四个或。。。节点

    #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;
            }
        }
    }
#包括
使用名称空间std;
结构节点
{
INTA;
结构节点*下一步;
}零;
node*first=NULL;
int main()
{
int t;
对于(int i=0;i<10;i++)
{
节点*n=第一;
cin>>t;
if(first==NULL)
{
节点温度;
温度a=t;
第一个=&temp;
temp.next=NULL;
}
其他的
{
while((*n).next!=NULL)
{
n=(*n)。下一步;
}
节点tt;
tt.a=t;
(*n).next=&tt;
tt.next=NULL;
}
}
}
我插入了28。 我的第一个节点数据=28。 我插入了57。 我的第二个节点数据=57。 我插入了120。 我的节点数据=120。
…节点温度声明一个自动变量<代码>第一个=&temp指定
第一个
指向自动变量

自动变量会在作用域的末尾自动销毁——在本例中是if语句的复合子语句。此后,
first
不再指向有效对象-它将成为一个悬空指针


在下一次迭代中,在else分支中执行
node*n=first
,然后执行
*n
时,会间接使用一个悬空指针。程序的行为是未定义的。

在调试器中启动程序并逐行遍历代码时,您观察到了什么?我知道每次代码复查都会出现这种情况,但由于取消对悬空指针的引用(由于存储指向局部变量的指针),导致行为未定义。将
&
提供的内容存储起来供以后使用通常不是一个好主意。这也不例外。网络上到处都是链表的例子,书籍也是如此。你可以使用指向局部变量的指针。您从不分配新内存。我没有这个问题(我逐行检查),但我的问题是,每次创建第一个节点后,临时内存是一个特殊的内存空间,不会更改。@P7928Z当然有。在线<代码>节点温度分配内存。行内
first=&temp存储此内存的地址。在此之后,内存被释放。在行
中((*n).next!=NULL)
解除对该内存的引用。那是未定义的行为