我試圖實現自己的鏈表,並且一直在學習關於動態內存分配和指針等的代碼。當我嘗試添加一些東西到我的鏈表時,我得到一個段錯誤,並且在使用調試器時,我意識到這是因爲最初我的鏈表的頭指針沒有指向空,然後我的添加函數沒有將頭識別爲空。但我有一個初始化函數,它將鏈表的頭指針設置爲NULL,但由於某種原因,一旦我退出初始化函數並加入add函數,頭部不再指向NULL。鏈接列表頭沒有跨越函數調用更新
這裏是我的代碼:
list.h
typedef struct node{
int value;
struct node *next;
} Node;
typedef struct list{
Node *head;
} List;
list.c
void initialize(List *l){
if(l != NULL){
l = malloc(sizeof(List));
l->head = NULL;
}
}
void add(List *l, int a){
//Code
}
int main(){
List l;
initialize(&l)
add(&l, 2);
}
當我步入add函數,並打印出* L,我看到頭部不指向0x0。我一直在撓頭,爲什麼它不是。我認爲這是與價值傳遞有關,但我不認爲這是事實。我在這裏做錯了什麼?
建議執行搜索stackoverflow.com的。這個問題已經回答了很多次。 – user3629249
由於這更多的是關於針對我的案例的指針的概念性問題,所以我不認爲搜索問人家問題的人會幫助我。 –
無論您對指針使用有什麼誤解,發佈代碼的問題根源與許多關於stackoverflow上鍊接列表的問題都是一樣的。 – user3629249