2011-03-25 37 views
1

我有這個小程序的問題。它增加了一些值列表。如果我取消註釋//printf("%d",first->val);該程序會給出錯誤。一切似乎是確定;(問題用鏈表

#include <stdio.h> 
#include <stdlib.h> 

typedef struct element { 
    struct element *next; 
    int val; 
} el_listy; 

el_listy *first = 0; 


void add_to_list(el_listy *lista, int value) 
{ 

if(lista == 0) 
    { 
     lista = malloc (sizeof(el_listy)); 
     lista->val = value; 
     lista->next = 0; 
     printf("added as first \n"); 
    } 
     else 
     { printf("added as fsecond \n"); 
    el_listy *wsk = lista,*tmp; 

       while(wsk->next != 0) wsk = wsk->next; 

       tmp = malloc (sizeof(el_listy)); 
       tmp->val = value; 
       tmp->next = 0; 

       wsk->next = tmp;      
     } 
} 

int main() 
{ 
     add_to_list(first,2); 
      add_to_list(first,4); 
      //printf("%d",*first->val); 
      system("pause"); 
    return 0; 
} 

回答

4

first->val就像(*first).val,你不能使用他們。此外,作爲missingno說,add_to_list從未改變first你應該通過它的地址作爲參數,而不是指針本身,這意味着add_to_list(&first,4);(和變化add_to_list的執行和)

1

->已經按照一個指針,以便*試圖把first爲指針,指針el_listy您可能會發現cdecl有用

2

你的計劃不會改變的價值。 first。它仍爲空指針,因此在解除引用時會出現錯誤。

+0

可是......爲什麼呢?如何修復它? – Domiik 2011-03-25 22:21:43

1

您應該使用(*first).valfirst->val。否則,您將得到錯誤的間接級別

0

是的,這是一個簡單的錯誤。

fitr在* add_to_list()*函數被調用後不會改變。

你應該定義函數是這樣的:

add_to_list(El_list **lista, ...)