2014-06-19 163 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));