Проблема со связанным списком - PullRequest
1 голос
/ 26 марта 2011

У меня проблема с этой маленькой программой.Это добавило некоторую ценность в список.Если я раскомментирую //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;
 }

Ответы [ 5 ]

4 голосов
/ 26 марта 2011

first->val так же, как (*first).val, вы не можете использовать их оба. Кроме того, как уже говорилось, add_to_list никогда не меняет first, вы должны передать его адрес в качестве аргумента, а не сам указатель, что означает add_to_list(&first,4); (и также изменить реализацию add_to_list)

2 голосов
/ 26 марта 2011

Ваша программа никогда не изменяет значение first. Он остается нулевым указателем и, таким образом, выдает ошибку при разыменовании.

1 голос
/ 26 марта 2011

Вы должны использовать либо (*first).val, либо first->val. В противном случае вы получите неправильный уровень косвенности.

1 голос
/ 26 марта 2011

-> уже следует за указателем, поэтому * пытается трактовать first как указатель на указатель на el_listy.cdecl может оказаться полезным.

0 голосов
/ 26 марта 2011

Да, это простая ошибка.

fitsr не изменится после вызова функции * add_to_list () *.

Вы должны определить функцию так:

add_to_list(El_list **lista, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...