2012-05-07 4 views
0

Эта программа предназначена для создания списка ссылок. Когда я запускаю эту программу, это дает мне ошибку сегментации.ошибка сегментации в программе linklist

#include <stdio.h> 
#include <stdlib.h> 
struct node { 
    int data; 
    struct node *next, *prev; 
}; 
struct node *root=NULL; 
void push (int); 
void pop (void); 
struct node * create_node (int); 
void travel (void); 
int main() 
{ 
    int i, j, choice, count; 
    printf("enter choice\n"); 
    scanf("%d", &choice); 
    count = 0; 
    while (choice == 1) { 
     printf("enter a data element"); 
     scanf("%d", &j); 
     count++; 
     printf("enter choice\n"); 
     scanf("%d", &choice); 
    } 
    printf("the link list is \n"); 
//travel function to be created 
    travel(); 
} 

void push(int data) 
{ 
    struct node *t1; 
    t1=root; 
    while(t1->next!=NULL) 
    { 
    t1=t1->next; 
    } 
    t1->next=create_node(data); 
} 

void pop() 
{ 
} 


void travel (void) 
{ 
    struct node *t1; 
    t1=root; 
    while (t1->next!=NULL) 
    { 
     printf("%d ",t1->data); 
    } 
    printf("%d ",t1->data); 
} 
struct node * create_node (int data) 
{ 
    struct node *p = (struct node *) malloc (sizeof(struct node)); 
    p->data=data; 
    p->next=NULL; 
    p->prev=NULL; 
    return p; 
} 

Какая ошибка? Это, как я выполнил

[email protected]:~/programming$ ./a.out 
enter choice 
1 
enter a data element45 
enter choice 
1 
enter a data element67 
enter choice 
1 
enter a data element89 
enter choice 
0 
the link list is 
Segmentation fault 
+2

[Stack Overflow это не ваш личный научный сотрудник] (http://meta.stackexchange.com/a/128553/158667), пожалуйста, используйте отладчик или 'printf's сузить проблему. – Mat

ответ

3

Вы ничего root никогда назначить после его первоначального объявления и инициализации, поэтому всегда NULL, и вы переходите к разыменованию его в travel().

struct node *t1; 
t1=root; 

// what if root is NULL? Too late... segfault (you hope) 
while(t1->next!=NULL) 
+0

И когда вы исправляете эту ошибку и начинаете называть push, вы обнаружите, что она страдает от точно такой же ошибки. –

Смежные вопросы