Siemka!!
Piszę sobie prosty programik do szkoły, i mam problem z dynamiczną tablicą struktur.
Oto fragment kodu z którym się męcze
int realokacja = 1;
struct ksiazka * tab_ksiazki = NULL;
void * tmp;
case 1:
if(tab_ksiazki == NULL)
tab_ksiazki = (struct ksiazka *) malloc (realokacja * sizeof(struct ksiazka));
else
{
++realokacja;
if( ( tmp = (struct ksiazka *)realloc( tab_ksiazki, realokacja * sizeof(struct ksiazka) ) ) == NULL )
{
fprintf(stderr,"Realokacja nie powiodla sie\n");
exit(EXIT_FAILURE);
}
else
{
tab_ksiazki = tmp;
free(tmp);
}
}
printf("Podaj tytul ksiazki: ");
gets(tab_ksiazki[realokacja - 1].tytul);
printf("Podaj autora ksiazki: ");
gets(tab_ksiazki[realokacja - 1].autor);
printf("Podaj gatunek ksiazki: ");
gets(tab_ksiazki[realokacja - 1].gatunek);
printf("Podaj cene ksiazki: ");
scanf("%lf", &tab_ksiazki[realokacja - 1].cena);
fprintf( bazatxt,
"Tytul: %s\n"
"Autor: %s\n"
"Gatunek: %s\n"
"Cena: %.2f\n\n"
, tab_ksiazki[realokacja - 1].tytul, tab_ksiazki[realokacja - 1].autor, tab_ksiazki[realokacja - 1].gatunek, tab_ksiazki[realokacja - 1].cena);
break;
Problem jest taki, mogę dodać dwie struktury, kiedy chcę dodać 3, pojawia się błąd Realokacja nie powiodla sie.
Potem próbowałem zrobić to na piechotę, napisałem takie coś
tutaj jest struct ksiazka * tmp;
++realokacja;
tmp = (struct ksiazka *) malloc (realokacja * sizeof(struct ksiazka));
for(i = 0; i < realokacja - 1; i++)
tmp[i] = tab_ksiazki[i];
free(tab_ksiazki);
tab_ksiazki = tmp;
free(tmp);
i to mi działa, tylko że jak się pozbędę tego fprintfa, to znowu ten sam problem
proszę o pomoc