Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Pointer auf Array

  Alt 9. Mai 2012, 12:16
Variablen vom Typ eines dynamischen Arrays sind bereits Pointer.

Zwei wichtige Sachen müssen beachtet werden:
- Jedes dynamische Array hat einen Referenzzähler, fällt dieser auf 0 werden die Daten des Arrays freigegeben.
- Der Inhalt des Arrays kann nachräglich verändert werden. Weisen mehrere Pointer oder Variablen auf das selbe Array, verändern sich die Daten für alle.
Delphi-Quellcode:
uses
  Types, Contnrs;

procedure PushByteDynArray(AQueue: TQueue; const AValue: TByteDynArray);
procedure PopByteDynArray(AQueue: TQueue; var AValue: TByteDynArray);

implementation

procedure PushByteDynArray(AQueue: TQueue; const AValue: TByteDynArray);
var
  p: Pointer;
begin
  {wichtig, Delphi versucht bei der Zuweisung eines anderen dyn. Arrays
   den Referenzzähler des bisher zugewiesenen dyn. Arrays zu verringern}

  p := nil;

  {eindeutige Kopie erzeugen und Referenzzähler auf 1 setzen}
  TByteDynArray(p) := Copy(AValue);

  AQueue.Push(p);
end;

procedure PopByteDynArray(AQueue: TQueue; var AValue: TByteDynArray);
begin
  {für den bisherigen Inhalt Referenzzähler -1 , eventuell freigeben}
  AValue := nil;
  {der Cast verhindert die Referenzzählung}
  Pointer(AValue) := AQueue.Pop;
end;
  Mit Zitat antworten Zitat