我在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]。不要描述你的代碼,而是展示它。 –