我编写这段代码是为了自动获取值并将它们放在链表中,但它仅维护第一个,并替换第二个节点中的任何新值,而不会成为第三个,第四个或...个节点。
#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。 ...
答案 0 :(得分:2)
node temp;
声明一个自动变量。 first = &temp;
分配first
指向自动变量。
自动变量在作用域的末尾自动被破坏-在这种情况下,if语句的复合子语句。之后,first
不再指向有效对象-它变成了悬空指针。
在下一次迭代中,您执行node *n = first
,然后在else分支中执行*n
时,您将间接悬空指针。该程序的行为是不确定的。