Witam
Przedstawiam fragment programu tworzacego baze ksiazek (szczegoly nie musza byc raczej znane).
Ponizej fragment funkcji uzywajacej liste, wczytywajacej dane Z PLIKU.
Etykiety struktur:
struct ksiazka
{
char *tytul;
int rokwyd;
float cena;
struct autor *autors[MAX_AUT];
struct ksiazka *nast;
};
struct autor
{
char *imie;
};
Zdaje sobie sprawe, ze struktura autor jest zbedna, ale bedzie ona pozniej rozbudowywana.
for(i = 0; i < *fnumerks; i++)
{
fgets(buf , ROZMIARTYT , ww);
biezacy = (struct ksiazka *)malloc(sizeof(struct ksiazka));
printf("%s",buf);
if(*fks == NULL)
*fks = biezacy;
else
poprz->nast = biezacy;
buf[strlen(buf) - 1] = '\0';
biezacy->tytul = (char *)malloc((strlen(buf))* sizeof(char));
strcpy(biezacy->tytul, buf);
fgets(buf , ROZMIARAUT , ww);
buf[strlen(buf) - 1] = '\0';
biezacy->autors[0] = (struct autor *)malloc(sizeof(struct autor));
if (biezacy->autors[0] = NULL) exit(1);
biezacy->autors[0]->imie = (char *)malloc((strlen(buf))* sizeof(char));
strcpy(biezacy->autors[0]->imie, buf);
fscanf(ww , "%d" , &biezacy->rokwyd);
ch = getc(ww);
fscanf(ww , "%f" , &biezacy->cena);
ch = getc(ww);
poprz = biezacy;
}
Oczywiscie wszystko sie kompiluje. Problem w tym, ze po wczytaniu danych 2 ksiazek program przestaje dzialac (dokladnie w momencie, gdy ma przydzielic pamiec na trzecia strukture typu ksiazka). Wyglada na to, ze problem zwiazany jest wlasnie z pamiecia. Program dzialal dobrze do momentu az stworzylem przydzielanie pamieci dla struktury autor i stringu imie, takze tutaj upatruje bledu. Ale o co dokladnie moze chodzic?
Dziekuje za wszelkie wskazowki i pomoc.
P.S. Program jest w trakcie tworzenia i modyfikacji, dlatego może trochę "dziwnie" wyglądać.
Przedstawiam fragment programu tworzacego baze ksiazek (szczegoly nie musza byc raczej znane).
Ponizej fragment funkcji uzywajacej liste, wczytywajacej dane Z PLIKU.
Etykiety struktur:
struct ksiazka
{
char *tytul;
int rokwyd;
float cena;
struct autor *autors[MAX_AUT];
struct ksiazka *nast;
};
struct autor
{
char *imie;
};
Zdaje sobie sprawe, ze struktura autor jest zbedna, ale bedzie ona pozniej rozbudowywana.
for(i = 0; i < *fnumerks; i++)
{
fgets(buf , ROZMIARTYT , ww);
biezacy = (struct ksiazka *)malloc(sizeof(struct ksiazka));
printf("%s",buf);
if(*fks == NULL)
*fks = biezacy;
else
poprz->nast = biezacy;
buf[strlen(buf) - 1] = '\0';
biezacy->tytul = (char *)malloc((strlen(buf))* sizeof(char));
strcpy(biezacy->tytul, buf);
fgets(buf , ROZMIARAUT , ww);
buf[strlen(buf) - 1] = '\0';
biezacy->autors[0] = (struct autor *)malloc(sizeof(struct autor));
if (biezacy->autors[0] = NULL) exit(1);
biezacy->autors[0]->imie = (char *)malloc((strlen(buf))* sizeof(char));
strcpy(biezacy->autors[0]->imie, buf);
fscanf(ww , "%d" , &biezacy->rokwyd);
ch = getc(ww);
fscanf(ww , "%f" , &biezacy->cena);
ch = getc(ww);
poprz = biezacy;
}
Oczywiscie wszystko sie kompiluje. Problem w tym, ze po wczytaniu danych 2 ksiazek program przestaje dzialac (dokladnie w momencie, gdy ma przydzielic pamiec na trzecia strukture typu ksiazka). Wyglada na to, ze problem zwiazany jest wlasnie z pamiecia. Program dzialal dobrze do momentu az stworzylem przydzielanie pamieci dla struktury autor i stringu imie, takze tutaj upatruje bledu. Ale o co dokladnie moze chodzic?
Dziekuje za wszelkie wskazowki i pomoc.
P.S. Program jest w trakcie tworzenia i modyfikacji, dlatego może trochę "dziwnie" wyglądać.
Ostatnia edycja: