C++ singleLinkedlist c++;分段故障堆芯
我试图创建一个单链表,但上面的代码给出了一个错误:分段错误。我正在singlelinkedlist中插入元素5、9、12并显示列表。首先,我创建一个节点,然后使用所有方法对singlelinkedlist进行分类。我仍在努力学习基础知识C++ singleLinkedlist c++;分段故障堆芯,c++,C++,我试图创建一个单链表,但上面的代码给出了一个错误:分段错误。我正在singlelinkedlist中插入元素5、9、12并显示列表。首先,我创建一个节点,然后使用所有方法对singlelinkedlist进行分类。我仍在努力学习基础知识 #include <iostream> using namespace std; class Node { public: int data; Node* next; Node() { } No
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node* next;
Node()
{
}
Node(int element)
{
data = element;
next=NULL;
}
Node(int element, Node* link)
{
data = element;
next = link;
}
};
class SingleLinkedList
{
public:
Node* head;
int listsize = 0;
Node* curr;
bool isempty()
{
return head==NULL;
}
void Insert(int data)
{
Node* new_node = new Node(data);
if(isempty())
{
head = new_node;
listsize++;
return;
}
curr = head;
while(curr->next!=NULL)
{
curr->next=curr;
}
curr->next=new_node;
listsize++;
}
void display()
{
curr = head;
while(curr!=NULL)
{
cout<<curr->data<<"-->";
curr=curr->next;
}
}
};
int main()
{
SingleLinkedList l1;
l1.Insert(5);
l1.Insert(9);
l1.Insert(12);
l1.display();
}
#包括
使用名称空间std;
类节点
{
公众:
int数据;
节点*下一步;
节点()
{
}
节点(int元素)
{
数据=元素;
next=NULL;
}
节点(int元素,节点*链接)
{
数据=元素;
下一个=链接;
}
};
类SingleLinkedList
{
公众:
节点*头;
int listsize=0;
节点*curr;
布尔是空的
{
返回头==NULL;
}
无效插入(整型数据)
{
节点*新节点=新节点(数据);
if(isempty())
{
head=新的_节点;
listsize++;
返回;
}
curr=头;
while(当前->下一步!=NULL)
{
当前->下一步=当前;
}
当前->下一步=新节点;
listsize++;
}
无效显示()
{
curr=头;
while(curr!=NULL)
{
不能尝试改变:
while (curr->next != NULL)
{
curr->next = curr;
}
致:
如果您在执行节点插入时执行列表遍历,以避免无限循环,则指针head
未初始化。它的值不保证为nullptr
。因此,您的代码是UB,因为列表中的第一次插入将调用使用此未初始化指针的isempty()
当这样做时,也要考虑答案。
显示分段错误,这是为了避免代码中的无限循环。很好地发现了,但是之前还有另外一个问题;-)你试着在内核上运行调试器来查看分段故障发生的时间和原因吗?
while (curr->next != NULL)
{
curr = curr->next;
}