Mam problem z lista podwieszana, program bez wiekszego problemu tworzy mi glowna liste, ale nie moze stowrzyc nowego obiektu z listy podwieszanej.
Oto struktury:
struct Aktorzy{
struct Aktorzy* nast;
char Imie[];
};
struct Film{
struct Film* nast;
struct Aktorzy* nast2;
char Premiera[30], Nazwa[];
};
struct RezyserFilmowy{
struct RezyserFilmowy* nast;
struct Film* glowa;
char Imie[];
};
A oto moj kod:
void ZczytajListe (char []);
void DodajRezysera(char[], RezyserFilmowy**);
void DodajFilm (char[], char[], RezyserFilmowy**);
void DodajDate (char[], char[], char[], RezyserFilmowy**);
void DodajAktora (char[], char[], char[], RezyserFilmowy**);
int main()
{
char nazwapliku[] = "Lista.txt";
ZczytajListe (nazwapliku);
return 0;
}
void ZczytajListe (char nazwa[]){
char temp[100], rezyser[100], film[100], y = 'y', x = 'x';;
RezyserFilmowy *head;
head = (RezyserFilmowy*)malloc(sizeof(RezyserFilmowy));
head = NULL;
FILE *plik;
if((plik = fopen(nazwa, "r")) == NULL){
printf ("Nie udalo sie otworzyc pliku\n");
}
else{
while(!feof(plik)){
fgets(temp, 18, plik);
strcpy(rezyser, temp);
DodajRezysera(rezyser, &head);
while(temp[0] != x){
fgets(temp,200,plik);
strcpy(film, temp);
DodajFilm(film, rezyser, &head);
fgets(temp,200,plik);
DodajDate(temp, rezyser, film, &head);
while(temp[0] != y){
fgets(temp, 200, plik);
DodajAktora(temp, rezyser, film, &head);
}
}
}
}
}
void DodajRezysera(char imie[], RezyserFilmowy** head){
int dlugosc;
RezyserFilmowy* pomoc = *head;
RezyserFilmowy* nowy = (RezyserFilmowy*)malloc(sizeof(RezyserFilmowy));
dlugosc = strlen (imie);
strncpy(nowy->Imie, imie, dlugosc);
nowy->glowa = NULL;
nowy->nast = NULL;
if( (*head) == NULL){
*head = nowy;
}
else{
while(pomoc->nast != NULL){
pomoc = pomoc->nast;
}
pomoc->nast = nowy;
}
}
void DodajFilm (char tytul[], char rezyserf[], RezyserFilmowy** head){
int dlugosc;
RezyserFilmowy* pomoc = *head;
Film* nowy = (Film*)malloc(sizeof(Film));
dlugosc = strlen (tytul);
strncpy(nowy->Nazwa, tytul, dlugosc);
nowy->nast = NULL;
nowy->nast2 = NULL;
Film* pomoc2 = NULL;
if(head == NULL) return NULL;
else{
while (pomoc->nast != NULL && pomoc->Imie != rezyserf){
pomoc = pomoc->nast;
}
if (pomoc->glowa == NULL){
pomoc->glowa = nowy;
}
else {
pomoc2 = pomoc->glowa;
while (pomoc2 != NULL){
pomoc2 = pomoc2->nast;
}
pomoc2 = nowy;
}
}
}
void DodajDate (char data[], char rezyser[], char film[], RezyserFilmowy** head){
int dlugosc;
RezyserFilmowy* pomoc = *head;
Film* pomoc2 = NULL;
if(head == NULL) return;
else{
while (pomoc->nast != NULL && pomoc->Imie != rezyser){
pomoc = pomoc->nast;
}
pomoc2 = pomoc->glowa;
while (pomoc2 != NULL && pomoc2->Nazwa != film){
pomoc2 = pomoc2->nast;
}
dlugosc = strlen (data);
strncpy(pomoc2->Premiera, data, dlugosc);
}
}
void DodajAktora (char aktor[], char rezyser[], char tytul [], RezyserFilmowy** head){
int dlugosc;
RezyserFilmowy* pomoc = *head;
Film* pomoc2 = NULL;
Aktorzy *pomoc3 = NULL;
if(head == NULL) return NULL;
else{
while (pomoc->nast != NULL && pomoc->Imie != rezyser){
pomoc = pomoc->nast;
}
pomoc2 = pomoc->glowa;
while (pomoc2 != NULL && pomoc2->Nazwa != tytul){
pomoc2 = pomoc2->nast;
}
pomoc3 = pomoc2->nast2;
if (pomoc3 == NULL){
Aktorzy* nowy = (Aktorzy*)malloc(sizeof(Aktorzy));
dlugosc = strlen (aktor);
strncpy(nowy->Imie, aktor, dlugosc);
}
else{
while (pomoc3->nast != NULL){
pomoc3 = pomoc3->nast;
}
Aktorzy* nowy = (Aktorzy*)malloc(sizeof(Aktorzy));
dlugosc = strlen (aktor);
strncpy(nowy->Imie, aktor, dlugosc);
}
}
}
Program zacina sie w momencie gdy wchodzi do funkcji DodajFilm i jest na linii:
Film* nowy = (Film*)malloc(sizeof(Film));
Czy ktoś mógłby mi podpowiedzieć lub wytłumaczyć dlaczego?