Nie działa lista jednokierukowa, usuwanie elementu.

0

Witam,

mam problem z listą jednokierunkową.
Gdy dodam np. 3 elementy na listę i usunę element 2 to lista mi się sypie.

Mam taki kod, nie widzę za Chiny błędu:


void Lista_proc::remove(int x)
{
	Lista_proc *wsk = first;
	
	
	if(x == first->dane.nr_procesu)
		first = first->next;
	else if(x != first->dane.nr_procesu)
	{
		while(wsk->next->dane.nr_procesu != x)
			wsk = wsk->next;
		//wsk2 = wsk->next;
		if(wsk->next->next == NULL)
			wsk->next = NULL;
		else
			wsk->next = wsk->next->next;
	}

	delete wsk->next;
}
 

Proszę o pomoc.

0

Za długo się nie przyglądałem, ale nie pasuję mi to, że zawsze zwolnisz pamięć,nawet jeżeli nie znajdziesz elementu o wartości x..

0

zastanów się który element zwolnisz:
delete wsk->next;

jak znajdziesz już element po tym whilu, to mniej więcej dalej tak powinno wyglądać:

if (wsk->next) // jesli w ogole go znalazles
  {
    Lista_proc* do_usuniecia = wsk->next;
    wsk->next = wsk->next->next; // właściwie to tutaj jest usuwanie, a nie w następnej linii która zwalnia pamięć
    delete do_usuniecia;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1