由于gcc中的指针导致的分段错误

时间:2011-11-11 21:32:42

标签: c++ linux gcc

我正在尝试使用以下代码实现链接列表,我收到了段错误,请告诉我问题出在哪里。

我使用的是ubuntu gcc编译器,请给我一些建议

#include<iostream>

using  std::cout;
using  std::cin;


class ll
{
    struct node
    {
        int info;
        node *nextnode ;
    }*n;



public:
    ll()
    {
        n=NULL;
    }

    void getinfo()
    { 
        node *temp,*r;


        if( n==NULL )
        {
            temp=new node;
            cout<<" \n enter the first elements of linklist \n";
            int z;
            cin>>z;
            //i guess problem starts here
            temp->info=z;
            cout<<"the value of info is";
            temp->nextnode = NULL;
            n=temp;
        }
        else{
            temp=n;
            cout<<"heheh balls";
            while(temp->nextnode==NULL)
            {
                temp=temp->nextnode;
            }
            r=new node;
            cout<<"enter the element \t";
            int y;
            cin>>y; 
            r->info=y;
            r->nextnode=NULL;
            temp=r;
        }
    }

    void display()
    {
        node *temp=n;
        while(temp->nextnode==NULL)
        {
            cout<<temp->info;

        }
    }

};

int main()
{
    ll p;
    int v;
    cout<<"enter the number of elements to be added to linklist \t";
    cin>>v;
    //tryn to input linklist from terminal
    for(int i=0;i<v;i++)
    {
        p.getinfo();
    }
    p.display();

    return 0;
}

2 个答案:

答案 0 :(得分:2)

while(temp->nextnode==NULL)
{
    temp=temp->nextnode;
}
....
temp=r;

应该是

while(temp->nextnode!=NULL)
{
    temp=temp->nextnode;
}
....
temp->nextnode=r;

同样适用于:

void display()
{
    node *temp=n;
    while(temp->nextnode==NULL)
    {
        cout<<temp->info;

    }
}

应该是:

void display()
{
    node *temp=n;
    while(temp!=NULL)
    {
        cout<<temp->info;
        temp = temp->nextnode;
    }
}

答案 1 :(得分:2)

代码中有几个错误,如下所示:

 void
  getinfo ()
  {
    node *temp, *r;

    if (n == NULL)
      {
    temp = new node;
    cout << " \n enter the first elements of linklist \n";
    int z;
    cin >> z;
    //i guess problem starts here
    temp->info = z;
    cout << "the value of info is";
    temp->nextnode = NULL;

添加下一行,你必须将头指向第一个元素。

    n = temp;

继续......

      }
    else
      {
    temp = n;
    cout << "heheh balls";

在这里你应该迭代,而下一个元素,将==更改为!=

    while (temp->nextnode != NULL)

继续......

      {
        temp = temp->nextnode;
      }
    r = new node;
    cout << "enter the element \t";
    int
      y;
    cin >> y;
    r->info = y;
    r->nextnode = NULL;
    temp->nextnode  = r;
      }
  }

下一个功能:

  void
  display ()
  {
    node *temp = n;

下一行已更改,请在您拥有节点时保持打印数字

while (temp)
  {
    cout << temp->info;

不要忘记移动到下一个节点

        temp = temp->nextnode;
      }
  }

就是这样,它有效。