我是 C 編程的新手,我正在從一本書中學習,所以如果以下內容過于基礎,我深表歉意。我正在嘗試實作一流的鏈表,以下程式在執行時給了我錯誤“分段錯誤:11”。
#include <stdlib.h>
typedef struct node* link;
typedef struct node {int item; link next;} node;
typedef struct linked_list {link head; link tail;} linked_list;
int main(void)
{
link x;
x = malloc(sizeof(node));
x->next = NULL;
x->item = 12;
linked_list* l;
l->head = x;
}
相同的程式沒有鏈表指標,而只是:
linked_list l;
l.head = x;
運行得很好。但是,我需要多個串列,所以我最終會想要指標,我似乎無法弄清楚出了什么問題。有誰知道可能的解決方案?先感謝您。
uj5u.com熱心網友回復:
我正在嘗試實作一流的鏈表
術語“一流的鏈表”是沒有意義的。實際上,您要實作的是一個雙邊單鏈表。
在此代碼段中
linked_list* l;
l->head = x;
l您正在使用具有不確定值的未初始??化指標。因此,取消參考它會導致未定義的行為。
相反,你可以寫例如
linked_list l = { .head = x, .tail = x };
宣告結構型別的物件并初始化其兩個資料成員。
如果要使用指向鏈表的指標,則linked_list動態分配型別的物件,例如
linked_list* l = malloc( sizeof( *l ) );
l->head = x;
l->tail = x;
嚴格來說,最初的串列應該是空的。
linked_list* l = malloc( sizeof( *l ) );
l->head = NULL;
l->tail = NULL;
您需要撰寫一個將新節點添加到鏈表的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507321.html
上一篇:在C中將EOF讀取為char
