0

リンクリストを作成するプログラムです。このプログラムを実行すると、セグメンテーション違反が発生します。

#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;   
 }

エラーは何ですか?これが私が実行した方法です

user@ubuntu:~/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
4

1 に答える 1

3

root最初の宣言と初期化の後は何も割り当てないため、常にNULLであり、 で逆参照に進みますtravel()

struct node *t1;
t1=root;

// what if root is NULL?  Too late... segfault (you hope)
while( t1->next!=NULL)
于 2012-05-07T19:04:05.617 に答える