[C] Lista jednokierunkowa

0

Witam! Mam problem z listą jednokierunkową. Podczas jej tworzenia wypisuję sobie dla pewności jej elementy. Wszystko się zgadza. Numeruje tak jak sobie tego życzę. Następnie jednak chcę wypisać wszystko jeszcze raz. I tu się zaczyna kłopot. Przy:

while(element!=NULL)
            {
                printf("%d\n",element->Numer_Indeksu);
                element=element->next;
            } 

program wpada w nieskończoną pętlę i nie wypisuje wcale wyników, jakich oczekiwałem tylko jakieś ogromne liczby(stawiam na jakieś adresy, które nie wiem jak się tam znalazły).

Oto cały kod:

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

typedef struct pt number;

struct pt
    {
        int Numer_Indeksu;
         struct number *next; /* wskaźnik do następnej struktury */
    };


int main()
    {
        int x=0;      //Zmienna pomocnicza do pętli
        number *root;    //Początek listy
        number *element; //Element listy
        element=(number *)malloc(sizeof(number));   //Przydzielenie pamięci pierwszemu elementowi
        root = element;         //root - pierwszy element listy - zawsze
        while(x!=10)
            {
                element->Numer_Indeksu = x;         //Przypisanie Elementowi Numeru Indeksu
                printf("%d\n", element->Numer_Indeksu);
                element = element->next;            //Przejście na następny element
                element=(number *)malloc(sizeof(number));   //Przydzielenie pamięci nowemu elementowi
                ++x;

            }
        element->next = NULL;       //Ostatni element wskazuje na NULL

        element = root;                 //Przeglądaj od początku
        while(element!=NULL)
            {
                printf("%d\n",element->Numer_Indeksu);
                element=element->next;
            }

        return 0;
    }

Ładnie proszę o pomoc.

1

Twój problem polega na tym że tobie się wydaje że jak zrobisz:

element = element->next;
element=(number *)malloc(sizeof(number)); 

To alokujesz pamięć w miejscu gdzie pokazywał poprzedni element->next, a to bzdura.

Żeby było poprawnie musisz zrobić

nowyElement=(number *)malloc(sizeof(number)); //alokujesz pamięć 
element->next = nowyElement; //związujesz poprzedni element listy z tym nowym
element = element->next; //przesuwasz się na kolejny element
0

Aha! Działa! Super:) Dziękuję bardzo.

Dla potomnych pozostawiam właściwy kod:

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

typedef struct pt number;

struct pt
    {
        int Numer_Indeksu;
         struct number *next; /* wskaźnik do następnej struktury */
    };

int main()
    {
        int x=0;      //Zmienna pomocnicza do pętli
        number *root;    //Początek listy
        number *element; //Element listy
        number *nowyElement;
        element=(number *)malloc(sizeof(number));   //Przydzielenie pamięci pierwszemu elementowi
        root = element;         //root - pierwszy element listy - zawsze
        while(x!=10)
            {
                element->Numer_Indeksu = x;         //Przypisanie Elementowi Numeru Indeksu
                printf("%d\n", element->Numer_Indeksu);
                //element = element->next;            //Przejście na następny element
                //element=(number *)malloc(sizeof(number));   //Przydzielenie pamięci nowemu elementowi
                nowyElement=(number *)malloc(sizeof(number)); //alokujesz pamięć
                element->next = nowyElement; //związujesz poprzedni element listy z tym nowym
                element = element->next; //przesuwasz się na kolejny element
                ++x;
            }
        element->next = NULL;       //Ostatni element wskazuje na NULL

        element = root;                 //Przeglądaj od początku
        while(element!=NULL)
            {
                printf("%d\n",element->Numer_Indeksu);
                element=element->next;
            }

        return 0;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1