Witam mam za zadanie stworzyć bazę danych w której muszę przypisać książki do poszczególnych uczniów,
Do przechowywania studentów użyłem tablicy structów. Natomiast do przechowywania książek listy jednokierunkowej.
Teraz stworzyłem funkcję która powinna przypisywać książki danemu studentowi. Tworzy ona listę oraz dodaje po kolei książki do listy, do póki użytkownik nie wprowadzi id książki = 0.
void assign_book(STUDENT *student_arr, BOOK *root){ /// PRZYPISANIE KSIAZEK STUDENTOM
BOOK *current_book = root;
ListBooks *current = NULL;
ListBooks *head = NULL;
ListBooks *ptr = NULL;
int i,b_select,count = 0;
do{
//current_book = root;
printf("\nPodaj id ksiazki:");
scanf("%d",&b_select);
while(current_book != NULL && b_select != 0){
if(b_select == current_book->id){
current = (ListBooks*)malloc(sizeof(ListBooks));
current->count = count;
current->Book = current_book;
current->next = NULL;
count++;
if(head == NULL){
head = current;
}else{
ptr = head;
while(ptr->next != NULL)
ptr = ptr->next;
ptr->next = current;
}
break;
}else{
current_book = current_book->next;
}
}
}while(b_select != 0);
}
Jednak jest pewien problem ponieważ, gdy chcę wyświetlić listę dostaję błąd:
Program received signal SIGSEGV, Segmentation fault.
In ungetwc () (C:\Windows\System32\msvcrt.dll)
void print_assigned_books(ListBooks *list_of_assigned_books){
ListBooks *current = list_of_assigned_books;
while(current != NULL){
printf("%s",current->Book->author);
current = current->next;
}
}
Tutaj umieszczam funkcję main:
int main(){
BOOK *HEAD = NULL; /// Wskaznik do pierwszego elementu listy
STUDENT S_ARRAY[20]; ///Lista 20 studentów
ListBooks *Ksiazki = S_ARRAY[2].books;
create_group(&S_ARRAY);
HEAD = create_library();
assign_book(&S_ARRAY[2],HEAD); //Funkcja przypisuje książki dla 2-go studenta
printf("\nDISPLAY BOOK:");
printf("\n==========================\n");
print_assigned_books(Ksiazki); //Funkcja wyświetlająca książki posiadane przez studenta.
return 0;
}
Nie jestem pewien o co chodzi. Gdyż sprawdzając te 2 funkcje debuggerem wszystko jest dobrze w funkcji przypisującej książki, jednak gdy próbuje je wyświetlić dostaję właśnie błąd:
Program received signal SIGSEGV, Segmentation fault.
In ungetwc () (C:\Windows\System32\msvcrt.dll)
Będę wdzięczny jeśli komuś uda się rozwiązać mój problem