0

これは、C++ で単一リンク リストを実装するためのコードです。挿入、削除、表示の3つの基本操作を行っています。データはメイン関数から渡されます。コードはコンパイルされますが、実行中に「セグメンテーション違反」が表示されます。コードの何が問題なのか教えてください。

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

1 に答える 1

3

問題は挿入機能にあります:

curr=head;

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

curr が null に達した後、それにアクセスしています。そのはず:

curr=head;

while(curr->next !=NULL)
{
    curr=curr->next;
}
curr->next=n;
于 2013-10-17T12:12:41.117 に答える