我是一個初學者,學習如何在C中創建鏈表。每當我嘗試打印出列表時,列表打印出來就好,但我總是以分段錯誤結束結束。當我使用GDB回溯時,它指向了行 - > entry = *((* node).data);在printContents函數中。C中的鏈接列表 - 分段錯誤
但是我不太清楚它有什麼問題。
這裏是鏈表代碼:
void createEmptyLinkedList(LinkedList *inList) {
inList = (LinkedList*)malloc(sizeof(LinkedList));
(*inList).head = NULL;
(*inList).tail = NULL;
(*inList).size = 0; //Keeps track of size of list
return;
}
void insertAtStart(LinkedList *inList, JournalEntry *inValue) {
LinkedListNode *newNode;
int listSize = (*inList).size;
newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
(*newNode).data = inValue;
(*newNode).next = (*inList).head;
(*inList).head = newNode;
((*inList).size)++;
return;
}
void printContents(LinkedList *inList) {
LinkedListNode *node;
JournalEntry entry;
node = (*inList).head;
while (node != NULL) {
entry = *((*node).data);
printf("%04d-%02d-%02d: %s\n", entry.year, entry.month, entry.day, entry.text);
/*Move node to the next node*/
node = (*node).next;
}
printf("Done!");
return;
}
//Free nodes recursively
void freeLinkedList(LinkedList *inList) {
freeNode((*inList).head);
free(inList);
return;
}
void freeNode(LinkedListNode *node) {
if (node != NULL) {
freeNode((*node).next);
free(node);
}
這裏是用來啓動鏈表的主要功能:
int main() {
LinkedList list;
JournalEntry *value;
char* textToEnter;
value = (JournalEntry*)malloc(sizeof(JournalEntry));
createEmptyLinkedList(&list);
textToEnter = "Hello";
(*value).day = 10;
(*value).month = 5;
(*value).year = 2010;
strcpy((*value).text, textToEnter);
insertAtStart(&list, value);
printContents(&list);
freeLinkedList(&list);
return 0;
}
以防萬一有人需要它,下面是聲明的結構在頭文件中:
typedef struct LinkedListNode {
JournalEntry *data;
struct LinkedListNode *next;
} LinkedListNode;
typedef struct {
LinkedListNode *head;
LinkedListNode *tail;
int size;
} LinkedList;
typedef struct {
int day;
int month;
int year;
char text[1000];
} JournalEntry;
與您的問題沒有特別的關係,但僅供將來參考,「(* foo).bar」形式的任何內容都可以重寫爲「foo-> bar」。 –
您是否檢查'data'是否有有效值? – jxh