Пробовал делать простую связанную программу списка, получая ошибку сегментации (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;
}
вы забываете выделить объект
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;
}
}
Вы специально проверяете, что head
NULL
и если да, то вы боретесь с head
. Это явно неправильно. Вероятно, вам захотелось сначала выделить новый узел.