2016-12-01 1 views
0

C에 이중 연결 목록이 있습니다.이 노드는 char *를 보유합니다. 노드에 대한 나의 구조체는 다음과 같습니다인쇄 할 때 프로그램이 충돌 함 LinkedList

struct LinkedListNode{ 
char* data; 
LinkedListNode* next; 
LinkedListNode* prev; }; 

LinkedList의의 구조체는 다음과 같습니다

struct LinkedList{ 
LinkedListNode* head; 
LinkedListNode* tail;}; 

머리리스트의 첫 번째 노드에 대한 포인터, 꼬리에 대한 포인터입니다 리스트의 마지막 노드 내 문제는 내가 연습 목적으로 구현하는 연결 목록에 대한 몇 가지 표준 함수를 테스트하기위한 함수를 작성하려고하는 것입니다. 그래서 나는 다음과 같은 기능의 목록을 생성하여 시작합니다

나는이 함수의 내부를 인쇄하려고하면 나는, 각 노드의 데이터를 다시 액세스 할 수 있기 때문에, 잘 작동 것으로 보인다
LinkedList* make_test_list(){ 
LinkedList* newlist = LinkedList_create(); 
printf("Hier2"); 
LinkedListNode n1; 
LinkedListNode n2; 
LinkedListNode n3; 
LinkedListNode n4; 
LinkedListNode n5; 
n1.data = "abc"; 
n2.data = "def"; 
n3.data = "ghi"; 
n4.data = "pqr"; 
n5.data = "mno"; 
n1.next = &n2; 
n2.next = &n3; 
n2.prev = &n1; 
n3.next = &n4; 
n3.prev = &n2; 
n4.next = &n5; 
n4.prev = &n3; 
n5.prev = &n4; 
n5.next = NULL; 
newlist->head = &n1; 
newlist->tail = &n5; 
return newlist;} 

.

LinkedList* LinkedList_create(){ 
LinkedList* list = malloc(sizeof(struct LinkedList)); 
list->head = NULL; 
list->tail = NULL; 
return list; 
} 

그래서 내가하고 싶은 다음 것은 별도의 기능에 내 목록을 인쇄 할 수 있습니다 : LinkedList_create()는 다음과 같은 코드가 포함되어 있습니다. 이 함수는 다음과 같습니다.

void LinkedList_print(LinkedList* list){  
LinkedListNode* p = list->head; 
while(p != NULL)){ 
    printf("%s\n", p->data); 
    p = p->next; 
}} 

그러나 어떻게 든 작동하지 않습니다. 나는 나의 포인터를 할당하는 동안 나는 실수를했다고 생각한다. 이 호출은 다음과 같습니다

int main(){ 
LinkedList* myList = make_test_list(); 
printf("List before: \n"); 

LinkedList_print(myList); 
} 

나 자신에 의해 메모리 할당을 관리하는 매우 C에 새로운 새로 온 사람 때문에 당신이이 일에 나를 도울 수 있다면 나는 기꺼이 것입니다.

건배!

+0

[mcve]를 보여주십시오. 코드를 설명하지 말고 대신 보여주십시오. –

답변

1

LinkedListNode 변수 (n1-n5)는 make_test_list 기능에 국한됩니다. 해당 함수 외부에서 액세스하려는 경우 메모리를 할당해야합니다. 예를 들어

: 물론

LinkedListNode *n1 = malloc(sizeof(*n1)); 
n1->data = "abc"; 
... 
newlist->head = n1; 
... 

은 또한 메모리 나중에 free 있는지 확인하려면. LinkedList_create은 여기에 표시되지 않았기 때문에 올바르게 구현되었다고 가정합니다.

+0

당신, 선생님, 제 영웅입니다! – Yannickl96

관련 문제