私は、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に新しいと新しいですので、あなたは、このいずれかに私を助けることができれば、私は喜んでいると思います。
乾杯!
[mcve]を表示してください。あなたのコードを記述せず、代わりに表示してください。 –