Dynamiczna tablica struktur - dynamiczna alokacja

0

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

1

wywal to:
free(tmp);
bo reallocujesz i natychmiast zwalniasz.

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