数据结构-双链表C实现运行时错误



下面是我编写的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

它是由什么引起的?

在使用指向该结构的指针访问其成员之前,必须为该结构分配内存。将函数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;
}

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

在你的程序中,在函数empty_dllist中有一个指针变量l,你试着跟随这个指针找到它指向的东西。但是这个变量是未初始化的,并且包含垃圾,所以得到分段错误并不奇怪。

您可能想要在empty_dllist中添加对malloc的调用,为您的列表分配一个头结构体。

您没有分配内存:

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

所以尝试访问l->head会导致内存访问错误

相关内容

  • 没有找到相关文章

最新更新