2014-06-19 49 views
0

DoubleLinkedList.h分段故障

#ifndef _DOUBLE_LINKED_LIST_H 
#define _DOUBLE_LINKED_LIST_H 

typedef unsigned int uint; 
typedef unsigned long ulong; 
typedef void* Object; 
typedef struct _DNode { 
    Object data; 
    struct _DNode* prev; 
    struct _DNode* next; 
}DNode; 

typedef struct _DoubleLinkedList{ 
    DNode* head; 
    DNode* tail; 
    uint length; 
    uint elementSize; 
}DoubleLinkedList; 

DoubleLinkedList* allocDList (uint elementSize); 
#endif 

DoubleLinkedList.c

#include "DoubleLinkedList.h" 

DoubleLinkedList* allocDList (uint elementSize) 
{ 
    DoubleLinkedList* l; 
    l->head = NULL; 
    l->tail = NULL; 
    l->length = 0; 
    l->elementSize = elementSize; 
    return l; 
} 

的main.c

#include <stdio.h> 
#include "DoubleLinkedList.h" 

int main() 
{ 
    DoubleLinkedList* ab; 
    ab = allocDList(10); 
    return 0; 
} 

当我尝试运行这个我得到一个核心转储的分段错误。

这是分配中所要求的。

DoubleLinkedList * allocDList(UINT elementSize):此函数分配的DoubleLinkList

+5

in'allocDList','l'未初始化。你会想为新节点分配一些内存。 –

回答

2

您还没有初始化l,所以l->HEAD将无法​​正常工作。你可以用它malloc作为初始化:

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

此外,在main功能,一旦你使用的是可变ab完成后,记得要释放使用free功能,通过它使用的内存如下:

int main() 
{ 
DoubleLinkedList* ab; 
ab = allocDList(10); 

//Processing here 

free(ab); //Release once it is no longer needed 

return 0; 
} 
+1

'sizeof(DoubleLinkedList *)'是指针的大小,而不是结构的大小。并且不要从'malloc()'中返回。你是不是指'sizeof(DoubleLinkedList)'? – DaV

+0

@DaV谢谢。已经更新了我的答案。 –

+0

为什么演员不需要? –

1

更新DoubleLinkedList.c为:

DoubleLinkedList* allocDList (uint elementSize) 
{ 
    DoubleLinkedList* l; 
    l = malloc(sizeof(DoubleLinkedList)); 
    l->head = NULL; 
    l->tail = NULL; 
    l->length = 0; 
    l->elementSize = elementSize; 
    return l; 
} 
+1

这个问题在'c'中被标记,因此新的可能不会被使用。 –

1

DoubleLinkedList *升;

您需要分配更多的内存来l

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