我在执行这个程序时遇到“分段错误”

时间:2013-10-17 11:58:21

标签: c++ ubuntu-12.04 singly-linked-list

这是用于在c ++中实现单链表的代码。 正在执行三种基本操作,即插入,删除和显示。数据从main函数传递。代码得到编译但在执行期间显示“分段错误”。 请告诉我代码有什么问题。

#include<iostream>
using namespace std;
class list
{
    private:
        typedef struct node
        {
            int data;`
            node* next;
        }* nodeptr;
        nodeptr head;
        nodeptr curr;
        nodeptr temp;
    public:
        list();
        void insert(int addData);
        void delet(int delData);
        void display();
};
list::list()
{
    head=NULL;
    curr=NULL;
    temp=NULL;
}
void list::insert(int addData)
{
    nodeptr n=new node;
    n->next=NULL;
    n->data=addData;
    if(head!=NULL)
    {
        curr=head;
        while(curr!=NULL)
        {
            curr=curr->next;
        }
        curr->next=n;
    }
        else
    {
        head=n;
    }
}    
void list::delet(int delData)
{
    nodeptr delptr=NULL;
    temp=head;
    curr=head;
    while(curr!=NULL&&curr->data!=delData)
    {
        temp=curr;
        curr=curr->next;
    }
    if(curr==NULL)
    {
        cout<<"Data not found.";
        delete delptr;
    }
    else
    {
        delptr=curr;
        curr=curr->next;
        temp->next=curr;
        delete delptr;
    }
}
void list::display()
{
    curr=head;
    while(curr!=NULL)
    {
        cout<<"\n"<<curr->data;
        curr=curr->next;
    }
}
int main()
{
    list l;
    l.insert(1);
    l.insert(2);
    l.insert(3);
    l.insert(4);
    l.insert(5);
    l.display();
    cout<<"\nDeleting:";
    l.delet(3);
    l.display();
    l.delet(5);
    l.display();
    return 0;
}

1 个答案:

答案 0 :(得分:3)

问题在于插入功能:

curr=head;

while(curr!=NULL)
{
    curr=curr->next;
}
curr->next=n;

到达curr后,您正在访问它。它应该是:

curr=head;

while(curr->next !=NULL)
{
    curr=curr->next;
}
curr->next=n;