Avatar billede 3string Nybegynder
29. december 2003 - 06:17 Der er 2 kommentarer og
2 løsninger

Delocate dynamic array?

Jeg har en variabel af typen : array of array of strings.

Selve arrayet er vel en 20 gange 10.000 stings, så det fylder godt i hukommelsen.
Problemmet er så bare at den ikke vil frigive hukommelsen, selv om jeg sætter variablen til nil.

Lidt kode:

var
  data : array of array of String;

begin
//blabla
//osv
data := nil; // <-- frigiver ikke hukommelsen
end;

Hvad gør jeg forkert?
Avatar billede tauron Nybegynder
29. december 2003 - 09:38 #1
Ifølge manual og help gør du tilsyneladende det rigtige - men der er jo altid faldgruber.

Jeg tror, at  problemet kan være, at der findes referencer til de strings, der er elementer i arrayet.  Så prøv at løbe arrayet igennem og sæt de enkelte elementer til en tom streng (data[x] := '';)inden du sætter data := NIL;

Se evt. Delphis Help for setlength
Avatar billede borrisholt Novice
29. december 2003 - 11:21 #2
Du skal sætte Setlength til 0 for hvert array der skal frigives hukommelse.

Reglen er i Delphi alt dynamisk allokeret hukommelse skal du selv frigive. Strings undtaget !

Jens b
Avatar billede tauron Nybegynder
29. december 2003 - 13:12 #3
Det er en god ide at bruge setlength(0) - men rent faktisk siger manualen, at man kan deallocere et dynamisk array ved at sætte variablen til NIL.

Citat (Object Pascal side 5.19):
To deallocate a dynamic array, assign nil to a variable that references the array or pass the variable to Finalize; either of these methods disposes of the array, provided there are no other references to it.

Det sidste forbehold var grunden til at jeg foreslog nulstilling af de strings, der var i arrayet.
Avatar billede 3string Nybegynder
29. december 2003 - 23:21 #4
Jeg har givet jer 15 point hver, selv om det var Borrisholt's svar, som var mest brubar/præcis

God Jul ;)
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