这是一个简单的C ++链表程序。我面临的问题是,当我运行代码时,它获取第一个数据,但接下来显示异常错误。我在Visual Studio 2017上运行此代码。我尝试了很多,但无法理解代码的原因无法正常工作。
#include<iostream>
using namespace std;
struct Node {
int data;
Node *next;
}*head = NULL, *temp = NULL , *temp1 = NULL;
Node* Create_New_Node(int);
int Insert(Node *);
Node* Create_New_Node(int a)
{
Node *np = new Node;
np->data = a;
np->next = NULL;
return np;
}
int Insert(Node *np)
{
if (head == NULL) {
head = np;
return 0;
}
temp1 = head;
while(temp1 != NULL) {
temp1 = temp1->next;
}
temp1->next = np;
}
int main()
{
char ch = 'y';
int inf;
while (ch == 'y' || ch == 'Y')
{
system("cls");
cout << "Enter data : " << endl;
cin >> inf;
temp = Create_New_Node(inf);
Insert(temp);
cout << "Press y to continue " << endl;
cin >> ch;
}
system("pause");
return 0;
}
以下是错误输出:
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ucrtbased.dll'. Symbols loaded.
'Project2.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp140d.dll'. Symbols loaded.
Exception thrown: write access violation.
**temp1** was nullptr.
The program '[10588] Project2.exe' has exited with code 0 (0x0).
由于我是C ++链表概念以及Stack Overflow的新手,因此有人可以帮助我编写代码。无论哪里出错,都要纠正我。谢谢。
答案 0 :(得分:0)
看看这个循环
while(temp1 != NULL) { // <---
temp1 = temp1->next;
}
temp1->next = np;
当temp1
为NULL时结束,然后您由于段错误而试图访问next
指针的NULL
成员。
temp1
仅在temp1->next
不为NULL时可以高级,因此可以如下修改函数
while(temp1->next)
{
temp1 = temp1->next;
}
我们不需要检查temp1
是否不是NULL,因为从head
节点开始遍历列表,并且temp1
总是通过上面的赋值更新为非NULL值循环。