Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#14

Re: Dynamische Array-Variable freigeben (ARRAY OF BOOLEAN)

  Alt 21. Mai 2010, 11:33
SetLength(X, 0) leitet den Aufruf an DynArrayClear weiter und dieses gibt das Array frei.

Delphi-Quellcode:
procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: Longint; lengthVec: PLongint);
...
begin
  p := a;

  // Fetch the new length of the array in this dimension, and the old length
  newLength := PLongint(lengthVec)^;
  if newLength <= 0 then
  begin
    if newLength < 0 then
      Error(reRangeError);
    DynArrayClear(a, typeInfo);
    exit;
  end;

  ...
(DynArraySetLength ist die interne Funktion von SetLength bei einem dynamischen Array)

X := nil; ruft bei dynamischen Arrays direkt das DynArrayClear auf, ohne Umweg über SetLength.
(Compiler-Magic ist doch was Tolles )

PS: sobald ein dyn. Array nicht mehr benötigt wird, gibt Delphi dieses automatisch frei.
(also bei einer lokalen Array-Variable geschieht das in dem Code, welcher sich quasi im end; der Prozedur versteckt)


PS: fehlen eigentlich nur bei mir große Teile von Beitrag #1 und #3?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat