2014-06-19 4 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 (단위는 elementSize)이 함수는 DoubleLinkList

+5

'allocDList'에'l'이 초기화되지 않았습니다. 새 노드에 대해 일부 메모리를 할당하려고합니다. –

답변

2

일부 메모리를 할당해야합니다. 당신은 그것으로 malloc를 사용하여 초기화 할 수 있습니다 다음과 같이 변수 ab를 사용하여 수행되면, main 기능에,

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

또한, 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'태그가 붙어 있으므로 new를 사용할 수 없습니다. –

1

DoubleLinkedList *의 L;

당신은 당신은 너무 l->HEAD 작동하지 않습니다, l를 초기화하지 않은 l

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