Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ singleLinkedlist c++;分段故障堆芯_C++ - Fatal编程技术网

C++ singleLinkedlist c++;分段故障堆芯

C++ singleLinkedlist c++;分段故障堆芯,c++,C++,我试图创建一个单链表,但上面的代码给出了一个错误:分段错误。我正在singlelinkedlist中插入元素5、9、12并显示列表。首先,我创建一个节点,然后使用所有方法对singlelinkedlist进行分类。我仍在努力学习基础知识 #include <iostream> using namespace std; class Node { public: int data; Node* next; Node() { } No

我试图创建一个单链表,但上面的代码给出了一个错误:分段错误。我正在singlelinkedlist中插入元素5、9、12并显示列表。首先,我创建一个节点,然后使用所有方法对singlelinkedlist进行分类。我仍在努力学习基础知识

#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;
 }