我剛剛開始學習C,和(看似)到目前爲止大多數的東西是點擊。不過,我在嘗試雙鏈表時遇到了一些問題。當我嘗試構建/運行此代碼時,我不斷收到seg-fault
。我正在使用Cygwin通過NetBeans提供的gcc進行編譯。雙鏈表;新手嘗試
我不想只轉儲的代碼塊,並說「幫助」,但我不知道還有什麼其他細節相關的在這個時候,可以隨意在必要時詢問詳情:
#include <stdio.h>
#include <stdlib.h>
struct node_t{
struct node_t *prev;
struct node_t *next;
};
struct list_t{
struct node_t *head;
struct node_t *tail;
int length;
};
struct node_t *new_node(void);
struct list_t *new_list(void);
int append_list_node(struct list_t *list, struct node_t *node);
int main(void) {
int i = 0, length = 0;
struct node_t *node;
struct list_t *list = new_list();
for(i = 0; i < 10; i++){
length = append_list_node(list, new_node());
printf("%d", length);
}
return 0;
}
struct node_t *new_node(void){
struct node_t *node = malloc(sizeof(struct node_t));
return node;
}
struct list_t *new_list(void){
struct list_t *list = malloc(sizeof(struct list_t));
list->length = 0;
return list;
}
int append_list_node(struct list_t *list, struct node_t *new_node){
if(list->head == NULL){
list->head = new_node; // edited
new_node->prev = NULL;
}else{
list->tail->next = new_node;
new_node->prev = list->tail;
}
return (++list->length);
}
謝謝對於大家的超快反應,所有的答案都是正確的。正如我簡要地看在F5
-ing之間的代碼,我意識到我沒有設置tail
,所以我決定改變線條爲標誌edited
如下:
list->head = list->tail = new_node;
我也將解決使用calloc()
不過,我已經讀到,頻繁使用它會導致執行時間相當大的成本,因爲它正在清理和分配。思考?
你可以用GDB運行它,並說出發生分段錯誤的位置嗎? – Maz 2011-05-05 16:12:17
list-> tail-> next = new_node; list->當第一次執行此行時,tail是未初始化的 – yurib 2011-05-05 16:14:55
** @ Maz **:顯然是我在編輯中提到的行。 ** @ yurib **:謝謝,檢查我的編輯,希望這是一個合理的解決方案。 – Dan 2011-05-05 16:20:11