CPP-我得到分割故障(核心转储)



我正试图实现一个单链表..我正在终端上执行代码,我得到分割故障(核心转储)。我不明白为什么会这样?我也读了其他的答案,不幸的是没有一个有帮助。

请解释一下哪里出了问题。谢谢!
 //singly linked list 
#include<iostream>
using namespace std;
class node
{
int data;
node *next;
public:
node()    //constructor
{
    data=0;
    next=NULL;
}
void setdata(int x)
{
    data=x;
}
void setnext(node *x)
{
    next=x;
}
int getdata()
{
    return data;
}
node* getnext()
{
    return next;
}
};
class list
{
node *head;

public:
list()                               // constructor
{
    head=NULL;
}
void firstnode(int x)
{
    node *temp;
    temp=new node;
    temp->setdata(x);
    temp->setnext(head);
    head=temp;
}
void insertbeg(int x)
{
    node *temp1;        
    temp1=new node;                            //Allocate memory to temp1
    temp1->setdata(x);                         // set data  in new node to be inserted
    temp1->setnext(head);          // new node points to previous first node
    head=temp1;                              // head now points to temp1
}
void insertbet(int x,int y)
{
    node *temp1;
    node *temp2;
    temp1=new node;                       // Allocate memory to temp1
    temp2=new node;                        // Allocate memory to temp2
    temp1=head;                           // point temp1 to head so both of them point to first node
    for(int i=0;i<y;i++)                  // To reach the desired node where data is to be inserted
    {
        temp1->getnext();                // point to next of node pointed by temp
        temp1=temp1->getnext();          // temp1 now contains address of node pointed by next
    }
    temp2->setdata(x);
    temp2->setnext(temp1->getnext());         // insert new node in list 
    temp1->setnext(temp2);                  // points the y-1 node to new node
}
void insertend(int x)
{
    node *temp1;
    node *temp2;
    temp1=new node;
    temp2=new node;
    temp1=head;
    while(temp1!=0)
    {
        temp1=temp1->getnext();
    }
    temp2->setdata(x);
    temp1->setnext(temp2);
    temp2->setnext(NULL);
}
void print()
{
    node *temp1;
    temp1=new node;
    temp1=head;
    while(temp1!=0)
    {
        cout<<temp1->getdata()<<endl;;
        temp1=temp1->getnext();
    }
}
};
int main()
{
list l;
l.firstnode(4);
l.insertbeg(3);
l.insertbeg(4);
l.insertbeg(6);
l.insertend(45);
l.insertend(9);
l.insertbet(2,46);
l.print();
return 0;
}
对不起,伙计们,我是编码新手,我正在努力调试,进展甚微。我已经看过问题了,答案太宽泛了,我需要一些具体的东西来解决错误。

这就是为什么会有像gdb这样的调试工具(谷歌一下就知道了;))。

这是回溯:

#0  0x00000000004009ba in node::setnext (this=0x0, x=0x614cc0) at a.cpp:25
#1  0x0000000000400c18 in list::insertend (this=0x7fffffffdf10, x=45) at a.cpp:109
#2  0x00000000004008df in main () at a.cpp:137

这意味着在第137行有一个函数调用(l.insertend(45)),然后在第109行,有下一个函数调用(temp1->setnext(temp2)),段故障发生在第25行(next = x)。这是因为节点没有初始化(第109行temp1为0)。

你的while循环是有问题的,如果你把它改成这样:

while (temp1->getnext() != 0)
    temp1 = temp1->getnext();

这将解决你的第一个问题,但你会得到另一个段错误;)尝试用提供的工具自己解决它。如果你还需要帮助,请留下评论,我会把答案贴出来。

相关内容

  • 没有找到相关文章

最新更新