Este posibilă eliberarea memoriei atribuite matricei multidimensionale

Am, de fapt, un uint64_t [8] [3] Totuși, nu am nevoie de toate pozițiile din acest tablou. Aș putea crea o altă structură a nodurilor pentru a stabili doar poziții corecte, dar ar fi mai greu pentru că mă bazez pe indicii matricei pentru programul meu particular. Cum pot elibera selectiv anumiți indicatori ai matricei.

De exemplu, nu am nevoie de uint64_t [4] [3] sau uint64_t [7] [3] pentru un anumit nod cum pot elibera acest lucru?

0
Nu poți. Este un mic spațiu neutilizat, care nu merită să vă faceți griji.
adăugat autor R Sahu, sursa
Mai degrabă utilizați un std :: vector > , cu matricea brută care nu este posibilă.
adăugat autor πάντα ῥεῖ, sursa
Unul dintre ele este alocat, este alocat. Trebuie să renunțați la toate sau la nimic, și în acest caz aveți o alocare automată. Sistemul eliberează variabile automate atunci când ieșirea din domeniul de aplicare. Nu le puteți elibera mai devreme, dar este posibil să puteți ajusta codul pentru a reduce domeniul de aplicare. Dacă doriți să utilizați mai puțin dintr-o matrice, adăugați o variabilă de păstrare a contabilității pentru a urmări capacitatea.
adăugat autor user4581301, sursa
Unul dintre ele este alocat, este alocat. Trebuie să renunțați la toate sau la nimic, și în acest caz aveți o alocare automată. Sistemul eliberează variabile automate atunci când ieșirea din domeniul de aplicare. Nu le puteți elibera mai devreme, dar este posibil să puteți ajusta codul pentru a reduce domeniul de aplicare. Dacă doriți să utilizați mai puțin dintr-o matrice, adăugați o variabilă de păstrare a contabilității pentru a urmări capacitatea.
adăugat autor user4581301, sursa
Multumesc tuturor. de ce a comentat toată lumea în loc să răspundă. Acum nu pot închide problema fără să o șterg.
adăugat autor Jon Bovi, sursa

6 răspunsuri

Nu poți să-l eliberezi, este cpp așa funcționează ...

2
adăugat

Nu poți să-l eliberezi, este cpp așa funcționează ...

2
adăugat

Acest lucru nu este posibil sau cel puțin nu așa cum doriți. Dacă încercați să implementați o structură binară ca arbore, aruncați o privire la arbore binar în acest fel aveți o structură arborescentă unde puteți aloca doar ceea ce aveți nevoie dinamic.

dacă aveți în continuare nevoie de rețele, nu utilizați matrice vechi de tip c, comitetul C + + actualizează în mod activ standardul începând din 1998, iar modul modern de lucru cu array-uri utilizează std :: array . Dacă lucrați într-un mediu în care lucrați cu vechile C-API-uri, scrieți-vă logica într-un C ++ modern biblioteca statică compilați-o și conectați-o împotriva acestei biblioteci din C-API.

Acestea fiind spuse Dacă vă faceți griji cu privire la problemele de performanță sau de memorie, ar trebui să vă reconsiderați modul de gândire, mulți dezvoltatori tineri sunt prinși în acest tipar de gândire și sfârșesc să scrie un cod care nu este nici rapid, nici elegant din punct de vedere al designului numit pesimizând codul). Când scrieți mai întâi un program, începeți cu un design ușor de citit și simplu, faceți profiluri și aflați ce este lent și ar trebui optimizat.

dacă într-adevăr aveți nevoie de unele dintre valorile din matrice pentru a fi nuluri, astfel încât să puteți face lucruri nebunești cu el (cum ar fi verificarea null, pe care aș descuraja foarte mult) să vă împachetați numere întregi într-o altă clasă:

class Integer
{
public:
    explicit Integer(int value)
    {
        value_ = value;
    }
    Integer &operator=(Integer other)
    {
        value_ = other.value_;
    };

private:
    int value_;
};

class test
{
public:
    test()
    {
        Integer four(4);

        std::array, 2> arr = { std::make_unique(four), nullptr};
    }
};

NOTĂ: Ceea ce am scris mai sus este doar un truc, așa că știi că totul este posibil în C ++, totuși complexitatea a ceea ce am scris pentru a obține ceea ce vrei, ar trebui să te convingă că nu este o abordare bună pentru cazul tău simplu.

NOTĂ II: Codul nu este testat, nu folosiți acest lucru ca în codul de producție.

0
adăugat

Acest lucru nu este posibil sau cel puțin nu așa cum doriți. Dacă încercați să implementați o structură binară ca arbore, aruncați o privire la arbore binar în acest fel aveți o structură arborescentă unde puteți aloca doar ceea ce aveți nevoie dinamic.

dacă aveți în continuare nevoie de rețele, nu utilizați matrice vechi de tip c, comitetul C + + actualizează în mod activ standardul începând din 1998, iar modul modern de lucru cu array-uri utilizează std :: array . Dacă lucrați într-un mediu în care lucrați cu vechile C-API-uri, scrieți-vă logica într-un C ++ modern biblioteca statică compilați-o și conectați-o împotriva acestei biblioteci din C-API.

Acestea fiind spuse Dacă vă faceți griji cu privire la problemele de performanță sau de memorie, ar trebui să vă reconsiderați modul de gândire, mulți dezvoltatori tineri sunt prinși în acest tipar de gândire și sfârșesc să scrie un cod care nu este nici rapid, nici elegant din punct de vedere al designului numit pesimizând codul). Când scrieți mai întâi un program, începeți cu un design ușor de citit și simplu, faceți profiluri și aflați ce este lent și ar trebui optimizat.

dacă într-adevăr aveți nevoie de unele dintre valorile din matrice pentru a fi nuluri, astfel încât să puteți face lucruri nebunești cu el (cum ar fi verificarea null, pe care aș descuraja foarte mult) să vă împachetați numere întregi într-o altă clasă:

class Integer
{
public:
    explicit Integer(int value)
    {
        value_ = value;
    }
    Integer &operator=(Integer other)
    {
        value_ = other.value_;
    };

private:
    int value_;
};

class test
{
public:
    test()
    {
        Integer four(4);

        std::array, 2> arr = { std::make_unique(four), nullptr};
    }
};

NOTĂ: Ceea ce am scris mai sus este doar un truc, așa că știi că totul este posibil în C ++, totuși complexitatea a ceea ce am scris pentru a obține ceea ce vrei, ar trebui să te convingă că nu este o abordare bună pentru cazul tău simplu.

NOTĂ II: Codul nu este testat, nu folosiți acest lucru ca în codul de producție.

0
adăugat

Puteți elibera elementele din anumiți indici dacă sunt alocați dinamic folosind ștergerea (de exemplu, ștergeți variabilName [0] [2]), dar nu puteți elimina indicele propriu-zis.

0
adăugat

Puteți elibera elementele din anumiți indici dacă sunt alocați dinamic folosind ștergerea (de exemplu, ștergeți variabilName [0] [2]), dar nu puteți elimina indicele propriu-zis.

0
adăugat