Cześć,
próbuje zrobić algorytm tworzący listę dwukierunkową, sortujący ją, usuwający elementy. Visual Studio wywala mi wyjątek o treści:
"Zgłoszono wyjątek: naruszenie dostępu do zapisu.
pomocniczy2 było nullptr."
w funkcji usun w lini o treści: pomocniczy2->nastepny = pomocniczy->nastepny;
wie ktoś z czego to może wynikać, albo jak to naprawić? Z góry dzięki za poświęcony czas i pomoc :D
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
// zad 1
struct TwoWayList {
float wartosc;
struct TwoWayList* nastepny;
struct TwoWayList* poprzedni;
};
// zadanie 2
void printReversed(struct TwoWayList* glowa){
struct TwoWayList* pomocniczy = glowa;
while (pomocniczy->nastepny != NULL)
{
pomocniczy = pomocniczy->nastepny;
}
while (pomocniczy != NULL)
{
printf("%.1f, ", pomocniczy->wartosc);
pomocniczy = pomocniczy->poprzedni;
}
}
void add(struct TwoWayList* glowa, float liczba) {
struct TwoWayList* nowyelement = malloc(sizeof(float) + 2 * sizeof(struct TwoWayList*));
while (glowa->nastepny != NULL) {
glowa = glowa->nastepny;
}
glowa->nastepny = nowyelement;
nowyelement->wartosc = liczba;
nowyelement->nastepny = NULL;
nowyelement->poprzedni = glowa;
}
// sortowanie struktóry
void sortowanie(struct TwoWayList* glowa) {
struct TwoWayList* druga = glowa;
struct TwoWayList* pierwsza=glowa;
druga = druga->nastepny;
float zmienna;
while (druga!= NULL ) {
if (druga->wartosc < pierwsza->wartosc){
zmienna = druga->wartosc;
druga->wartosc = pierwsza->wartosc;
pierwsza->wartosc = zmienna;
//printNormal(glowa);
//printf("\n");
sortowanie(glowa);
}
druga = druga->nastepny;
pierwsza = pierwsza->nastepny;
}
}
// wypisywanie normalnie
void printNormal(struct TwoWayList* glowa) {
struct TwoWayList* pomocniczy = glowa;
while (pomocniczy != NULL)
{
printf("%.1f, ", pomocniczy->wartosc);
pomocniczy = pomocniczy->nastepny;
}
}
void usun (struct TwoWayList* glowa, float liczba) {
struct TwoWayList* pomocniczy = glowa;
while (pomocniczy->wartosc != liczba && pomocniczy != NULL) {
pomocniczy = pomocniczy->nastepny;
}
struct TwoWayList* pomocniczy2 = pomocniczy->poprzedni;
pomocniczy2->nastepny = pomocniczy->nastepny;
struct TwoWayList* pomocniczy3 = pomocniczy->nastepny;
pomocniczy3->poprzedni = pomocniczy2;
free(pomocniczy);
}
int main(int argc, char *argv[]) {
struct TwoWayList mylist;
mylist.wartosc = 4.5;
mylist.nastepny = NULL;
mylist.poprzedni = NULL;
add(&mylist, 5);
add(&mylist, 2);
add(&mylist, 4);
add(&mylist, 5);
printReversed(&mylist);
sortowanie(&mylist);
printf("\n");
printNormal(&mylist);
usun(&mylist, 2);
printf("\n");
printNormal(&mylist);
getchar();
return 0;
}