Avatar billede tax Nybegynder
15. oktober 2001 - 12:54 Der er 10 kommentarer og
2 løsninger

Memory leaks detected.

Jeg får en masse memory leaks, når jeg lukker mit program.

Jeg anvender list og vector datatyperne og har dem mistænkt for ikke at få ryddet op efter sig. Hvordan \"gør man rent\" efter disse?
Avatar billede tax Nybegynder
15. oktober 2001 - 12:57 #1
Jeg glemte at sige at det er et windows projekt i vc++ :)
Avatar billede jpk Nybegynder
15. oktober 2001 - 12:59 #2
Bruger du \'new\' nogle steder i dit program?
Avatar billede tax Nybegynder
15. oktober 2001 - 13:00 #3
Jada.
Avatar billede jpk Nybegynder
15. oktober 2001 - 13:01 #4
Sørger du så for at kalde \'delete\' på disse objekter/variabler?
Avatar billede tax Nybegynder
15. oktober 2001 - 13:04 #5
Det mener jeg at gøre allerede.
Det jeg har mistænkt er de vector lister jeg anvender.
jeg er ikke sikker på at jeg får lukket dem ordenligt i mine destruktorer.

Skal man gøre noget specielt. Jeg anvender vectornavn.clean()

Avatar billede jpk Nybegynder
15. oktober 2001 - 13:07 #6
Mon ikke nærmere du glemmer at kalde \'delete\' for nogle objekter?
Man kan ofte se i hvilken sammenhæng der er memory leaks ved at undersøge teksten, som VC++ udskriver nederst!
Avatar billede jpk Nybegynder
15. oktober 2001 - 13:08 #7
Hvis du i dine vectors har oprettet objekter med new, skal du slette dem igen med \'delete\' for du kalder clean()...
Avatar billede jpk Nybegynder
15. oktober 2001 - 13:09 #8
øh, clear(), ikke clean()...
Avatar billede tax Nybegynder
15. oktober 2001 - 13:12 #9
Jeg er netop ved at gennemgå mit proggy for det. Thanx.
Avatar billede wisen Nybegynder
15. oktober 2001 - 13:58 #10
Du kan også i destructoren til den klasse som håndterer dine lister bruge :

Liste.erase(Liste.begin(), Liste.end()); // Erase kalder destructoren på de elementer der ligger i listen...

\"Liste\" er selvfølgelig en instans af enten en list eller en vector...

/Wisen
Avatar billede soepro Nybegynder
15. oktober 2001 - 13:59 #11
Metoden clear() fjerner blot pegepinden til indholdet af vektoren - men ikek den memory du allokeret til det object som lå i vectoren.

For hver \"aObject = new TObject(this);\" skal du lave en \"delete aObject;\", når du er færdig med at bruge det, for at få frigivet memory igen. Husk også at tabel-elementer slettes med delete[] fremfor delete.
Avatar billede wisen Nybegynder
16. oktober 2001 - 07:57 #12
Takker for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester