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
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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;
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;
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)
Kurser inden for grundlæggende programmering