Segfault创建双重链表

时间:2016-06-05 22:51:29

标签: c

我正在尝试从文本文件中读取数字并创建一个双向链表。我对理论上的双链表工作有一个很好的理解,但我正在努力应用。我知道我可能试图取消引用NULL指针或指出超出范围。但是,我似乎无法确定究竟在哪里。

它输出第一个数字,然后在if / else语句处给我一个段错误。

#include<stdio.h>
#include<stdlib.h>

struct node {
    int val;
    struct node *next;
    struct node *prev; 
};

struct list {
    struct node *head;
    struct node *tail;
};

int main()
{
    struct node *temp = NULL;
    struct list *l = NULL;
    FILE *fileptr;
    char filename[20], num[3];

    printf("Enter filename: ");
    scanf("%s", filename);
    fileptr = fopen (filename, "r");

    while(fscanf(fileptr, "%s", num) != EOF)
    {
        printf("Number is: %d\n", atoi(num));
        temp = (struct node *) malloc(sizeof(struct node));
        printf("HELLO 1\n");
        temp->val = atoi(num);
        printf("HELLO 2\n");

        if(l->tail == NULL)
        {
            l->head = temp;
            l->tail = temp;
        }
        else
        {
            l->tail->next = temp;
            temp->prev = l->tail;
            l->tail = temp;
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

struct list * l = NULL;你没有为l

分配任何内存是错误的

你可以做

 struct list *l = ( struct list *)malloc(sizeof(struct list));
l->head = NULL;
l->tail = NULL;

或者你可以尝试

struct list l = {0}; and later use l.head or l.tail