Witam, stworzyłem listę struktur którą uzupełniam danymi wczytanymi z pliku a następnie chcę wypisać dane na ekran. Projekt Buduje się bez błędów. Gdy wywołuję funkcję wypisz_listę()w konsoli wyskakuje błąd "Segmentation fault". Wiem, że szperam w niedozwolonych obszarach pamięci ale nie rozumiem dlaczego. Debugger wskazuje na linijkę z wywołaniem printf() w wypisz_listę(). Proszę o pomoc.
struct oper //definicja operatora
{
char nazwa;
int l_arg;
};
struct zmienna //definicja zmiennej
{
char nazwa[MAX_NAZWA];
int wart;
};
typedef struct { //jedno wyrazenie
struct oper op;
struct zmienna zm1;
struct zmienna zm2;
}wyrazenie;
typedef struct element{ //lista prosta
struct element *next;
wyrazenie* val;
}el_listy;
void dodaj_do_listy (el_listy *lista, wyrazenie* wyr ) //dodaje wyrazenie do listy
{
el_listy *wsk, *nowy;
wsk = lista;
while (wsk->next != NULL)
{
wsk = wsk->next; /* przesuwamy wsk aż znajdziemy ostatni element */
}
nowy = (el_listy*)malloc(sizeof(el_listy));
nowy->val = wyr;
nowy->next = NULL;
wsk->next = nowy;
}
void wypisz_liste(el_listy *lista)
{
el_listy *wsk;
wsk = lista;
while( wsk != NULL )
{
printf ("%s %s %c\n", wsk->val->zm1.nazwa, wsk->val->zm2.nazwa, wsk->val->op.nazwa ); ///BŁĘDNA LINIJKA !!!!!
wsk = wsk->next;
}
}
int main()
{
FILE* plik;
char linia[MAX_CH+1];
wyrazenie* wyr1 = malloc(sizeof(wyrazenie));
el_listy* lista = malloc(sizeof(el_listy));
el_listy* start = lista;
if(( plik = fopen("plik.txt", "r")) == NULL)
{
printf("Nie mogę otworzyć pliku plik.txt do odczytu!\n");
exit(1);
}
zeroj_wyrazenie( wyr1 );
while( (fgets(linia, 20, plik )) != NULL )
{
puts(linia);
if( przetworz_linie(linia, wyr1 ) == 0)
continue;
printf("wyr : zm1:%s zm2:%s op:%c\n", wyr1->zm1.nazwa, wyr1->zm2.nazwa, wyr1->op.nazwa );
dodaj_do_listy( lista, wyr1 );
zeroj_wyrazenie( wyr1 );
}
wypisz_liste(start); //lub parametr "lista", działa tak samo.
fclose(plik);
return 0;
}