以下是我编写的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
它是由什么造成的?
答案 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导致错误内存访问