2011-03-25 33 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, ...)