我想弄清楚爲什麼我的程序在調用ll_print時崩潰了。 [這是一個非常簡單和直接的問題,我不知道是什麼,真正加入到填補缺口解釋]鏈接列表 - C - 分段錯誤
struct ll{
struct ll* next;
int n;
} ll;
void ll_print(struct ll *l){
while (l) {
printf("%d ", l->n);
l=l->next;
}
}
void ll_fill(struct ll *l, int n){
struct ll *temp= NULL;
while (n>0){
l= (struct ll*)malloc(sizeof(struct ll));
l->n=n;
l->next= temp;
temp=l;
n--;
}
}
int main(void){
int i=0;
struct ll *l;
ll_fill(l, 10);
ll_print(l); /** causing a segmntation fault **/
}
您的解決方案工作很好,但我仍然困惑爲什麼我不得不將指針傳遞給指向ll_fill函數的指針。不傳遞單個指針意味着我們將內存中該結構的實際地址傳遞給該函數?不改變它的價值會導致改變它指向的實際價值? – Smokie 2012-07-15 06:43:23
@Smokie:它的確如此,但你也想在某處存儲一個結果,讓'l'在'main'內部聲明''看到'變化'。如果您更改通過「按值」傳遞的指針的值,則調用者將看不到更改。 – 2012-07-15 06:48:20