双向链表C实现运行时错误

时间:2014-03-29 10:05:04

标签: c data-structures linked-list segmentation-fault doubly-linked-list

以下是我编写的C程序。它包含双向链表的实现。

#include <stdio.h>

/* node of a doubly linked list */
typedef struct _dlnode {
    struct _dlnode* prev;
    int key;
    struct _dlnode* next;
} dlnode;

/* doubly linked list */
typedef struct _dllist {
    dlnode* head;
    dlnode* tail;
} dllist;

/* returns an empty doubly linked list */
dllist* empty_dllist () {
    dllist* l;
    l->head=NULL;
    l->tail=NULL;
    return l;
}

int main()
{
    dllist* l;
    l=empty_dllist ();
    return 0;
}

我收到以下运行时错误:

Segmentation fault: 11

它是由什么造成的?

3 个答案:

答案 0 :(得分:1)

在使用指向结构的指针访问其成员之前,必须为结构分配内存。将您的函数empty_dllist更改为 -

dllist *empty_dllist(void) {
    dllist *l = malloc(sizeof *l);
    if(l == NULL) {
        // failed to allocate memory
        // handle it
        // return NULL
    }
    l->head = NULL;
    l->tail = NULL;
    return l;
}

答案 1 :(得分:0)

分段错误通常是由于尝试跟踪未初始化或NULL指针引起的。

在你的程序中,你在函数 empty_dllist 中有指针变量 l ,并且你试着按照它指向它的指针。但是这个变量是未初始化的,并且是垃圾,因此你得到分段错误并不奇怪。

您可能希望在 empty_dllist 中添加对 malloc 的调用,为您的列表分配标题结构。

答案 2 :(得分:0)

您没有分配内存:

dllist* l = malloc(sizeof(dllist));

因此尝试访问l-&gt; head导致错误内存访问