c++ - 为什么我的简单链表在第一个节点之后不起作用?
问题描述
我编写此代码以自动获取值并将它们放入链表中,但它只维护第一个并替换第二个节点中的任何新值,并且不会生成第三个、第四个或 ... 节点。
#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。...
解决方案
node temp;
在复合语句中声明一个自动变量。first = &temp;
赋值first
为指向自动变量。
自动变量在作用域结束时自动销毁——在这种情况下是 if 语句的复合子语句。之后,first
不再指向一个有效的对象——它变成了一个悬空指针。
在下一次迭代中node *n = first
,然后*n
在 else-branch 中,您间接使用了一个悬空指针。程序的行为是未定义的。
推荐阅读
- javascript - 从 XML 文件创建对象数组 - Javascript
- azure - Azure 事件网格背后的技术是什么?
- php - 使用 PhpStorm 按特定顺序重新排列常用函数
- javascript - 如何在我的 React Native 项目中添加自定义 TTF 字体?
- linux - 超时一个 curl 命令 shell 脚本 centOS
- powershell - 在 PowerShell 窗口中确定特定 X、Y 坐标的背景颜色
- angular - 如何使用 jasmineSpy 测试 Angular 组件?
- python-3.x - 求解混合互补模型时出错
- javascript - 在 JavaScript 中使用 querySelector,而不是在 HTML 中工作
- c# - datagridview / autoresizecolumns 和 rows 的问题