Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Oslobađanje dinamički alocirane memorije.

[es] :: C/C++ programiranje :: C/C++ za početnike :: Oslobađanje dinamički alocirane memorije.

[ Pregleda: 2200 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ice-D

Član broj: 203571
Poruke: 33
*.adsl.net.t-com.hr.



Profil

icon Oslobađanje dinamički alocirane memorije.30.12.2008. u 10:06 - pre 186 meseci
Kako osloboditi (i dali treba osloboditi) dinamički alociranu memoriju na Stacku ( u funkciji ).
Code:
int* Implement::Find ()
{
    int* row = NULL;
    row = new int [allLines[i].size()];
    int* ptr;
    ptr = row;
    return ptr;
}
void Implement::CreateImage()
{
    int* x;
    x = Find ();
    x[2] = 5;
    delete []x; //dali ovo uništava i *row?
    x = NULL;
}
 
Odgovor na temu

Helionprime
Bajic Dusko
Banja Luka

Član broj: 206638
Poruke: 57
*.teol.net.



+1 Profil

icon Re: Oslobađanje dinamički alocirane memorije.30.12.2008. u 12:14 - pre 186 meseci
Mislim da ne uništava *row. Moraš dodati
Code:

delete[] row;


Mada, ne razumem, destruktor će i tako i tako da uništi sve na kraju (ako si ga definisao)
"Dont worry about thing, 'cause every lil' thing is gonna be allright" Bob Marley
 
Odgovor na temu

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
93.86.73.*



+101 Profil

icon Re: Oslobađanje dinamički alocirane memorije.30.12.2008. u 14:18 - pre 186 meseci
Nece ga unistiti, treba ti dvostruki pokazivac, tj pokazivac na pokazivac.
A i to mozes vrlo lako sam da proveris.
Samo namesti da ti dinamicka memorija ima nesto vise mesta, recimo 1MB, 2, ili tako nesto pa prati u task manageru kako se zauzima i kako se oslobadja memorija, pre i posle tog zauzimanja ili oslobadjanja samo stavi neki cin ili tako nesto da bi video razliku.
npr namesti niz od double elemenata, trodimenzioni npr. double niz[50][50][50] ipokazivac na njega i radi sa tim pa ces videti da ne oslobadja memoriju

Ja iskreno nisam mnogo radio sa dvostrukim pokazivacima pa ne znam tacno kako treba taj kod da izgleda, ali kontam da f-ja find mora da vraca int**
 
Odgovor na temu

Ice-D

Član broj: 203571
Poruke: 33
*.adsl.net.t-com.hr.



Profil

icon Re: Oslobađanje dinamički alocirane memorije.30.12.2008. u 14:59 - pre 186 meseci
Code:
//ovo
int* Implement::Find ()
{
    int* row = NULL;
    row = new int [allLines[i].size()];//10
    int* ptr;
    ptr = row;
    return ptr;
}
//ili ovo
int* Implement::Find ()
{
    int row[10];
    int* ptr;
    ptr = row;
    return ptr; //vraćam pokazivać na  pokazivać row ( on pokazuje na row[0] )
}
///ili ovo je jedno te isto
int* Implement::Find ()
{
    int row[10];
    return row; //vraćam pokazivać na prvi element niza
}
void Implement::CreateImage()
{
    int* x;
    x = Find ();
    x[2] = 5;
    delete []x; //ovim nisam uništio niz x, već []row, jer ja nisam alocirao memoriju za x. x samo pokazuje na row. x = ptr = row.
                   //dakle ne treba mi dvostruki delete
    x = NULL;
}

Ili sam sve krivo skontao?
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.dynamic.sbb.rs.



+1 Profil

icon Re: Oslobađanje dinamički alocirane memorije.30.12.2008. u 18:51 - pre 186 meseci
Dobro ti je ono što si napisao u prvom postu. Svejedno je da li vraćaš ptr ili row, jer return i onako vraća kopiju lokalne varijable ptr odnosno row. Da bi proverio kako kod teče probaj
Code:


#include <iostream>

using namespace std;


class My
{
public:

    My()
    {
        cout << "My()" << endl;
    }

    ~My()
    {
        cout << "~My()" << endl;
    }
};


My* f()
{
    My* row = new My[5];
    My* ptr = row;
    return ptr;// (2)
}

int main()
{
    My* r = f();
    delete[] r;// (1)
    return 1;
}

koji će po uništavanju niza objekata pozivati destruktor sa ispisom. Ako isključiš liniju (1) videćes da se destruktori ne pozivaju. Umesto (2) možeš da staviš
Code:

return row;

sve i dalje radi na isti način.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Oslobađanje dinamički alocirane memorije.

[ Pregleda: 2200 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.