2016-12-01 4 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_create()は、次のコードが含まれています。

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

だから私はやりたい次のことは、別々の機能で私のリストを印刷しています。 関数は次のようになります。

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

関連する問題