Witam. Pisze baze danych w C, ale mam problem z jedną funkcją. Pozamieniałem wszystkie swoje funkcje żeby dla danych wczytywanych z pliku dynamiczne alokował pamięć niestety gdy robię dynamiczną alokację dla funkcji usuwającej klasę, program nie dość że się zawiesza po usunięciu klasy to jeszcze kasuje całą zawartość pliku... Gdzie popełniam błąd...(dlugosc1 zmiennia obliczana w innej funkcji, jest to rozmiar pliku podzielony przez wielkość struktury). Dodam że w innych funkcjach(wyświetlanie, edycja, dodawanie) dynamiczna alokacja działa bez problemu. Z góry dzięki za pomoc.
void usun_klase(FILE *file, int dlugosc1) {
struct klasa *klas;
klas = (struct klasa *) malloc(dlugosc1 * sizeof(struct klasa));
int count = 0, index = 0, indeks, licznik;
FILE *tmp;
if ((file = fopen("projekt1.dat", "r")) == NULL)
{
fputs("Nie moge otworzyc pliku!\n", stderr);
exit(4);
}
if ((tmp = fopen("temp.dat", "w")) == NULL)
{
fputs("Nie moge otworzyc pliku!\n", stderr);
exit(4);
}
while (count < MAXNM && fread(&klas[count].litera, sizeof(struct klasa),1, file) == 1)
{
count++;
}
puts("Oto lista klas:\n");
while (index < count)
{
fread(&klas, sizeof(struct klasa), 1, file);
printf("%d.Klasa: %c Profil: %s, Wychowawca: %s ", index +1,klas[index].litera,klas[index].profil, klas[index].wych);
printf("\n");
index++;
}
index = 0;
printf("Podaj numer klasy,ktora chcesz usunac: ");
scanf("%d", &indeks);
indeks = indeks - 1;
for (index = indeks; index < count; index++)
klas[index]=klas[index+1];
fwrite(klas, sizeof(struct klasa), index-1, tmp);
printf("Klase usunieto!\n");
fclose(file);
fopen("projekt1.dat", "w");
while (fread(&klas[count].litera, sizeof(struct klasa),1, tmp) == 1)
{
count++;
}
fwrite(klas, sizeof(struct klasa), index-1, file);
fclose(file);
fclose(tmp);
free(klas);
while (getchar() != '\n')
continue;
}