Mam problem z listą dynamiczną. Funkcja powinna usuwać cztery elementy w przypadku kiedy trzeci element podzielny jest przez pierwsze dwa. W przeciwnym przypadku powinna usuwać jedynie ostatni element czwórki. Program przestaje działać i zwraca Process returned -1073741819 (0xC0000005).
void Sznur::usun_c22_czworki()
{
Box *tmp = glowa; // tymczasowy wskaznik
int licznik = 0;
while(tmp!=NULL)
{
licznik++;
tmp=tmp->next;
}
cout << "Licznik: " << licznik << endl;
cout << "Rozmiar: " << rozmiar << endl;
int ile_czworek = licznik/4;
cout << "Ile_czworek: " << ile_czworek << endl;
Box *pierwszy=NULL;
Box *drugi=NULL;
Box *trzeci=NULL;
Box *czwarty=NULL;
if (ile_czworek>=1)
{
pierwszy = glowa;
drugi = pierwszy->next;
trzeci = drugi->next;
czwarty = trzeci->next;
cout << "Zrobione!" << endl;
}
else
{
return;
}
Box *pred = NULL;
for (int i=0; i<ile_czworek; i++)
{
if (trzeci->value%pierwszy->value==0 && trzeci->value%drugi->value==0)
{
if (pred==NULL) // przypadek w ktorym 4 znajduje sie na poczatku listy
{
Box *killer = NULL;
glowa = czwarty->next;
if(glowa!=NULL)
{
drugi=glowa->next;
trzeci=drugi->next;
czwarty=trzeci->next;
}
else
{
drugi=NULL;
trzeci=NULL;
czwarty=NULL;
}
while(pierwszy!=glowa) // ustawiamy wsk pierwszy na nowa glowe
{
killer = pierwszy;
pierwszy = pierwszy->next;
delete killer;
}
}
else
{
Box *killer=NULL;
pred->next = czwarty->next;
if(pred->next!=NULL)
{
drugi=czwarty->next->next;
trzeci=drugi->next;
czwarty=trzeci->next;
}
else
{
drugi=NULL;
trzeci=NULL;
czwarty=NULL;
}
while(pierwszy!=pred->next)
{
killer=pierwszy;
pierwszy=pierwszy->next;
delete killer;
}
}
}
else
{
pred = trzeci;
Box *killer = czwarty;
if(czwarty->next!=NULL)
{
pierwszy=czwarty->next;
drugi=pierwszy->next;
trzeci=drugi->next;
czwarty=trzeci->next;
}
else
{
pierwszy=NULL;
drugi=NULL;
trzeci=NULL;
czwarty=NULL;
}
pred->next=pierwszy;
delete killer;
}
}
}