簡體   English   中英

打印LinkedList時程序崩潰

[英]Program crashes when printing LinkedList

我在C中有一個雙鏈表,其中的節點都包含一個char *。 我的節點結構如下所示:

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

LinkedList的結構如下所示:

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

head是指向列表的第一個節點的指針,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還是陌生的,而且對我自己管理內存分配還很陌生。

干杯!

您的LinkedListNode變量( n1 - n5 )是make_test_list函數的本地變量。 如果要在該功能之外訪問它們,則需要為其分配內存。

例如:

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

當然,您還希望確保以后free內存。 我還假設LinkedList_create已正確實現,因為此處未顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM