Napisalem nastepujace funkcje
void zaladujDzialyZPliku(struct dzial **head, struct dzial **tail, struct dzial *pos) {
FILE *dzial;
char nazwaDzialu[20];
int licznik=-1;
if ((dzial = fopen("katalog.txt", "r")) == NULL) {
bladOtwieraniaPliku();
return;
}
while (fscanf(dzial, "%20s", nazwaDzialu) != EOF) {
if(dodajDzial(head, tail, pos, nazwaDzialu) == 1) licznik++;
}
fclose(dzial);
pomyslnieDodano(licznik);
}
oraz
int dodajDzial(struct dzial **head, struct dzial **tail, struct dzial* pos, char nazwa[]) {
struct dzial *a;
a = (struct dzial*)malloc(sizeof(struct dzial));
char nazwaORG[20];
strcpy(nazwaORG, nazwa);
zamienNaMale(nazwa);
strcpy(a->nazwa, nazwa);
if (*head == NULL && *tail == NULL )
{
a->prev = NULL;
a->next = NULL;
*head = a;
*tail = a;
return 1;
}
if(strcmp(nazwa,pos->nazwa) < 0) {
a->next = *head;
(*head)->prev = a;
*head = a;
strcpy(a->nazwa,nazwaORG);
return 1;
}
while (pos != NULL)
{
if(strcmp(nazwaORG,pos->nazwa) == 0)
{
free(a);
return 0;
} else if(strcmp(nazwa,pos->nazwa) < 0) { //wstaw przed element POS
a->next = pos;
a->prev = pos->prev;
pos = pos->prev;
pos->next = a;
pos = a->next;
pos->prev = a;
strcpy(a->nazwa,nazwaORG);
return 1;
}
pos = pos->next;
}
a->prev = *tail;
(*tail)->next = a;
*tail = a;
strcpy(a->nazwa, nazwaORG);
return 1;
}
Lista z zalozenia ma byc samoorganizujaca, tj. wstawiac elementy od razu w kolejnosci alfabetycznej. Funkcje generalnie dzialaja dobrze. Problem pojawia sie jezeli chce wczytac dane z pliku do pustej listy. Dostaje blad o naruszeniu ochrony pamieci, co nie wystepuje jezeli wczytuje dane pojedynczo, lub z pliku i lista jest wczesniej niepusta. Co moze sie dziac?