Segmentation Fault(core dump)

M just a beginner !
The topic name is my issue at runtime !!
here is the code ! its a linked list by the way..

#include<iostream>
using namespace std;

struct structure
{
int value;
struct structure *next;
};
typedef struct structure node;

class linked_list
{
node *head; node *tail;
node *newnode;
public:
linked_list()
{
head = NULL;
tail = NULL;
}
void create(node *newnode);
void deletenode(node *newnode);
void display(node *newnode);
};

void linked_list::create(node *newnode)
{
int x;char place;
if(head==NULL && tail==NULL)
{
cout<<"Enter a number\n";
cin>>x;
newnode->value = x;
newnode->next = NULL;
head = newnode;
tail = newnode;
cout<<"Node Inserted";
}
else
{
cout<<"Enter a number\n";
cin>>x;
cout<<"Enter where do you want to insert... H for Head and T for Tail\n";
cin>>place;
if(place == 'H')
{
newnode->value = x;
newnode->next = head;
newnode = head;
cout<<"Node Inserted";
}
else
{
if(place == 'T')
{
newnode->value = x;
newnode->next = NULL;
tail->next = newnode;
newnode = tail;
cout<<"Node Inserted";
}
else
{
cout<<"please enter a valid place to insert... H for Head and T for Tail\n";
create(newnode);
}
}
}
display(head);
}

void linked_list::deletenode(node *newnode)
{
int x;
node *prev;
head = NULL;
tail = NULL;
cout<<"enter the value you want to delete\n";
cin>>x;
prev = head;
newnode = head->next;
if(head->value == x)
{
head = head->next;
display(head);
}
else
{
if(newnode->value==x)
{
prev->next = newnode->next;
display(head);
}
else
{
newnode = newnode->next;
prev = prev->next;
deletenode(newnode);
}
}
}

void linked_list::display(node *newnode)
{
newnode = head;
cout<<newnode->value;
if(newnode->next == NULL)
{
cout<<".";
}
else
{
cout<<"->";
newnode = newnode->next;
display(newnode);
}
}

int main()
{
int x;
node *newnode;
node *head = NULL;
node *tail = NULL;
linked_list l;
cout<<"1.Insert 2.Delete 3.Display 4.Exit\n";
cout<<"Enter your choice\n";
cin>>x;
switch(x)
{
case 1:
l.create(newnode);
case 2:
l.deletenode(newnode);
case 3:
l.display(newnode);
case 4:
return 0;
}
}
[code] "Please use code tags" [/code]
backtrace
Thanks ..
Here is the code with tag
pl help me out !!
Segmentation fault error at runtime



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include<iostream>
using namespace std;

struct structure
{
    int value;
    struct structure *next;
};
typedef struct structure node;

class linked_list
{
     node *head; node *tail;
     node *newnode;
     public:
          linked_list() 
          {
                head = NULL;
                tail = NULL;
           }
          void create(node *newnode);
          void deletenode(node *newnode);
          void display(node *newnode);
};

void linked_list::create(node *newnode)
{
          int x;char place;
          if(head==NULL && tail==NULL)
          {
               cout<<"Enter a number\n";
               cin>>x;
               newnode->value = x;
               newnode->next = NULL;
               head = newnode;
               tail = newnode;
               cout<<"Node Inserted";
          }
          else
         {
               cout<<"Enter a number\n";
               cin>>x;
               cout<<"Enter where do you want to insert... H for Head and T for Tail\n";
               cin>>place;
               if(place == 'H')
               {
                              newnode->value = x;
                              newnode->next = head;
                              newnode = head;
                              cout<<"Node Inserted";
               }
               else 
               {
                              if(place == 'T')
                              {
                                             newnode->value = x;
                                             newnode->next = NULL;
                                             tail->next = newnode;
                                             newnode = tail;
                                             cout<<"Node Inserted";
                               } 
                              else
                              {
                                             cout<<"please enter a valid place to insert... H for Head and T for Tail\n";
                                             create(newnode);
                              }
               } 
        }
       display(head); 
} 

void linked_list::deletenode(node *newnode)
{
               int x;
               node *prev;
               head = NULL;
               tail = NULL;
               cout<<"enter the value you want to delete\n";
               cin>>x;
               prev = head;
               newnode = head->next;
               if(head->value == x)
               {
                              head = head->next;
                              display(head);
               }
               else
               {
                              if(newnode->value==x)
                              {
                                             prev->next = newnode->next;
                                             display(head);
                              }
                              else
                              {
                                             newnode = newnode->next;
                                             prev = prev->next;
                                             deletenode(newnode);
                              }
               }
}

void linked_list::display(node *newnode)
{
               newnode = head;
               cout<<newnode->value;
               if(newnode->next == NULL)
               {
                              cout<<".";
               }
               else
               { 
                              cout<<"->";
                              newnode = newnode->next;
                              display(newnode);
               }
}

int main()
{
               int x;
               node *newnode;
               node *head = NULL;
               node *tail = NULL;
               inked_list l;
               cout<<"1.Insert 2.Delete 3.Display 4.Exit\n";
               cout<<"Enter your choice\n";
               cin>>x;
               switch(x)
               {
                              case 1:
                                             l.create(newnode);
                              case 2:
                                             l.deletenode(newnode);
                              case 3:
                                             l.display(newnode);
                              case 4:
                                             return 0;
               }
}  
Last edited on
1. You can use the Edit button
2. That indentation... :/
3.
ne555 wrote:
backtrace

4. At which point does it crash?
5. l.create(newnode);
newnode is undefined. you should use new node(); instead, or avoid using pointers while you're learning program basics.
3. Pl help me with backtrace... can i get more info on it !
4.It crashes when i type in a value for insertion/deletion. I think the function call works fine cause the first cout commands are being executed !
5.isnt node *newnode; defining the newnode ?
It's declaring it.
But not defining its content.
Its content is not a regular pointer, it's a random value.
You use new node(); to request a pointer to a node.
But you must delete (newnode); to free it.

Also:
http://www.cplusplus.com/articles/Lw6AC542/
Last edited on
http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_42.html
$ g++ main.cpp -ggdb
$ gdb a.out
> run
(Seg fault)
> backtrace
#0  0x0000000000400a00 in linked_list::create (this=0x7fffffffe2c0, newnode=0x4008c0 <_start>) at main.cpp:33
#1  0x0000000000400d4d in main () at main.cpp:132
there you see the exact line where it crashes, /*33*/ newnode->value = x; probably because you never initialized its value
Thanks a lot.
Can you please help me how do i do that ??
Topic archived. No new replies allowed.