vector zwalnianie pamięci

0

Witam,
Mam problem, nie potrafię w żaden sposób zwolnić pamięci vectora jeśli przestaje mi być on potrzebny. Niestety w funkcji rekurencyjnej gdy cały czas tworze nowy vector a starego nie zwalniam to przekracza mi pamięć dozwoloną dla danego zadania. Próbowałem metody resize() i clear() ale z tego co zauważyłem to nie zwalnia ona zasobów. Szukałem trochę i wyczytałem, że niektórzy robią jakieś strasznie zagmatwane operacje na wskaźnikach i jakieś destruktory w klasach. Mam pytanie, czy da się to zrobić jakoś w miarę prosto?

0
  1. operacje na wskaźnikach i destruktory w klasach to nie coś zagmatwanego tylko normalne techniki.
  2. Da się to zrobić w miarę prosto. Pokaż kod, wtedy na pewno ktoś Ci pomoże.
0

A może nie potrzebujesz tworzyć za każdym razem nowego wektora?

0

W ogólności, jeśli tworzysz ten wektor na stosie, to pamięć sama się zwolni. Jeśli chodzi Ci o to, żeby wraz z usunięciem elementów wektora zwolnić pamięć to robisz tak (przykład na vector<int>:

vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);

// usuniecie elementów i zwolnienie pamięci (przypisanie pustego vectora)
v = vector<int>();
0

mój kod jest taki:

 
osoba magicznepiatki(vector <osoba> tab, int n, int k){
	osoba m5;
	vector <osoba> M;
	int i;
	if(n<=10){
		sort(tab.begin(), tab.end(), porownaj);
		return tab[k];
	}
	else{
		m5.pesel = 4294967295;
		m5.imie = "{";
		m5.nazwisko = "{";

		while(tab.size()%5 != 0)
			tab.push_back(m5);
		for (int i = 0; i < tab.size(); i+=5){
			sort(tab.begin()+i, tab.begin()+i+5, porownaj);
			M.push_back(tab[i+2]);
		}
		m5 = magicznepiatki(M, M.size()-1, M.size()/2);
		M = vector<osoba>();
		vector <osoba> tabm, tabr, tabw;
		for (int i = 0; i <= n; i++){
			if(porownaj(tab[i], m5)) tabm.push_back(tab[i]);
			else if(porownaj(m5, tab[i])) tabw.push_back(tab[i]);
			else tabr.push_back(tab[i]);
		}
		tab = vector<osoba>();
		int rm = tabm.size(), rw = tabw.size(), rr = tabr.size();
		if(rm-1 >= k){
			tabr.resize(0);
			tabw.resize(0);
			return magicznepiatki(tabm, rm-1, k);
		}
		else if(rm+rr-1 >= k){
			tabr.resize(0);
			tabw.resize(0);
			tabm.resize(0);
			return m5;
		}
		else{
			tabm.resize(0);
			tabr.resize(0);
			return magicznepiatki(tabw, tabw.size()-1, k-rm-rr);
		}
	}
}

próbowałem już różnych metod i niestety pochłania mi ten algorytm zbyt dużo pamięci

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