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, botów: 0