Symulacja zarządzania plikami w systemie operacyjnym za pomocą metody indeksowej.

0

Cześć mam do wykonania projekt na studia w C++ który symuluje dodawanie plików , wyswietlanie zajętych bloków i-węzła , usuwanie plików...
Napisałem coś takiego jak ponizej , ale nie mogę dodać więcen niż 1 plik bo wyskakuje błąd : "iNode.exe has triggered a breakpoint."
A przy usuwaniu pokazuje mi : " Vector iterator not incrementable". Jakieś pomysły?

main : https://4programmers.net/Pastebin/6380
inode.cpp : https://4programmers.net/Pastebin/6382
inode.h: https://4programmers.net/Pastebin/6381

1
else if (it->size == size) 
{
     it++;  // po co to...
     inodki.erase(it-1);  //... jeśli robisz to?
     disc = setdisc(inodki);
}

Dziwaczna i błędna konstrukcja. erase unieważnia iteratory od pozycji usuwanej do końca zbioru. Tak zrób:

for (vector<iNode>::iterator it = inodki.begin(); it != inodki.end(); )
{
	if (it->size == size) 
	{
		it = inodki.erase(it);
		disc = setdisc(inodki);
	}
	else ++it;
}

--- dodane ---

Nie wgryzałem się zbytnio w Twój kod, ale to rozwiązanie będzie bardziej optymalne (o ile użycie setdisc jest prawidłowe):

auto it = remove_if(inodki.begin(); 
					inodki.end(), 
					[size](const iNode& node) { return node.size == size; } );
inodki.erase(it, inodki.end());
disc = setdisc(inodki);
0

Nadal nie mogę dodać więcej niz 1 plik, np jak dodam jakiś, potem chce dodać inny albo go usunę i naduszę znowu na dodaj i wpiszę jakiś rozmiar to wyrzucam mi ten błąd o którym wspominałem wyżej ... "iNode.exe has triggered a breakpoint." Co moze być pochrzanione w dodawaniu plików? Nie ukrywam , że trochę mi się pali grunt bo musze to na jutro oddać :/

0
iNode::iNode()
{
  struct tm *tm_struct = localtime(&now);
  ...
  delete(tm_struct); //<--- !!!
}
// to samo w drugim konstruktorze

Gdzie masz napisane, że pamięć, którą zwróci funkcja localtime, powinieneś usunąć (i to jeszcze używając delete)?

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