Avatar billede loke-liscom Nybegynder
18. februar 2003 - 13:03 Der er 2 kommentarer og
1 løsning

Et lille spørgsmål

I det her kode

procedure bla;
var
  Dom : PWideChar;
  TmpLength : LongInt;
  Domain : string;
begin
  TmpLength := Length(Domain)*SizeOf(WideChar)+1;
  GetMem(Dom, TmpLength);
  StringToWideChar(Domain, Dom, TmpLength);
end;

hvordan frigiver jeg så hukommelsen som Dom står og holder på?

Da det er en procedure/funktion frigiver Delphi så den hukommelse som der er allokeret i funktionen/proceduren når den er færdig med den?

Hmmm.. det var vist 2 spørgsmål, jeg vil gerne have et svar på begge...

//Klaus
Avatar billede Per Skalshøi Nybegynder
18. februar 2003 - 13:22 #1
Hukommelse allokeret med GetMem skal frigives med FreeMem, der er ingen undtagelse - heller ikke at den Dom er en lokal variabel :-)

f.eks:

  TmpLength := Length(Domain)*SizeOf(WideChar)+1;
  GetMem(Dom, TmpLength);
  try
    StringToWideChar(Domain, Dom, TmpLength);
  finally
    FreeMem(Dom);
  end;
Avatar billede loke-liscom Nybegynder
18. februar 2003 - 13:37 #2
I dette eks. skal jeg så også frigive den hukommelse der må være allokeret af API-kaldet?(NetUserGerInfo)

procedure blabla;
var
  ErrorC : LongWord;
  Srv : PWideChar;
  TmpLength : LongInt;
  Server : string;
  Buf : PUSER_INFO_2;
begin
  Server := 'AZKS_PDC01';

  TmpLength := Length(Server)*SizeOf(WideChar)+1;
  GetMem(Srv, TmpLength);
  try
    StringToWideChar(Server, Srv, TmpLength);
    ErrorC := NetUserGetInfo(Srv,'brugernavn',2, @buf);
    if ErrorC <> 0 then memo1.lines.add('Error '+inttostr(ErrorC))
    else memo1.lines.Add(Buf.usri2_full_name);
  finally
    Freemem(dom)
  end;
end;
Avatar billede Per Skalshøi Nybegynder
21. februar 2003 - 13:37 #3
Som grundregel skal du selv frigive den hukommelse du selv har allokeret.

Dvs. har du et kald til GetMem skal du frigive med et kald til FreeMem.

Et andet eksempel kunne være brug af
new(etellerandet)

der skal frigives af det modsvarende
dispose(etellerandet)
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