Ошибка основного дампа связанного списка C ++

0

Пробовал делать простую связанную программу списка, получая ошибку сегментации (core dumped), может кто-нибудь помочь в этом. Невозможно понять, где именно перепутаны указатели.

И можете ли вы предложить другие эффективные способы написания этого

#include<iostream>
using namespace std;

struct node{
    int x;
    node *next;
}*head=NULL,*temp=head;


class list{
public:
    list(){
            temp=head;
    }
 //is something happening here causing core dump?
    void addnode(int value){
            if (head==NULL)
            {
                    head->x=value;
                    head->next=NULL;
            }
            else
            {
                    while(temp->next!=NULL)
                    temp=temp->next;
                    temp->next=new node;
                    temp=temp->next;
                    temp->x=value;
                    temp->next=NULL;
            }
    }

    void print(){
            while (temp->next!=NULL)
            {
                    cout<<temp->x<<" ";
                    temp=temp->next;
            }
    }
};

int main()
{
list l=list();
l.addnode(12);
l.addnode(23);
l.print();
return 0;
}
Теги:
linked-list
coredump

2 ответа

0
Лучший ответ

вы забываете выделить объект

void addnode(int value){
        if (head==NULL) 
        {
                head = new node; //here was a mistake
                head->x=value;
                head->next=NULL;

также удалить глобальную временную переменную и использовать локальную

else
{
    node *temp = head;
    while(temp->next!=NULL)
        temp=temp->next;

}

void print(){
        node *temp = head;
        while (temp!=NULL) // here mistake too
        {
                cout<<temp->x<<" ";
                temp=temp->next;
        }
}
  • 0
    Разве он не расположен в самой верхней части? struct node {int x; узел * следующий; } * Головка = NULL
  • 0
    Вы проверяете, является ли голова нулевой, а затем пытаетесь использовать ее. Вы должны создать узел вместо с новым. * head = null создает только указатель на объект
Показать ещё 1 комментарий
0

Вы специально проверяете, что head NULL и если да, то вы боретесь с head. Это явно неправильно. Вероятно, вам захотелось сначала выделить новый узел.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню