Einzelnen Beitrag anzeigen

Matthias.

Registriert seit: 25. Okt 2024
3 Beiträge
 
Delphi 12 Athens
 
#1

Pointer Speicherinhalt geht verloren

  Alt 4. Dez 2024, 13:22
Delphi-Version: 12 Athens
Hallo zusammen,

ich habe eine Frage zu Pointern in Delphi.
Delphi-Quellcode:
type

  PMyList = ^TStringList;
  TMyList = TStringList;

  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Test;
  private
    FMyList: TMyList;
    FMyListPointer: PMyList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  LTempList: TMyList;
begin
  LTempList := TMyList.Create;

  LTempList.Add('Test1');
  LTempList.Add('Test2');
  LTempList.Add('Test3');
  FMyList := LTempList;
  FMyListPointer := @LTempList;

  Test;
end;

procedure TForm1.Test;
var
  LMyList: TMyList;
  LMyListFromPointer: TMyList;
  LAddr1: Pointer;
  LAddr2: Pointer;
  LTemp: String;
begin
  LAddr1 := @FMyList;
  LAddr2 := @FMyListPointer;

  LMyList := FMyList;
  LMyListFromPointer := FMyListPointer^;
  LTemp := LMyList[0];
  LTemp := LMyListFromPointer[0];
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  LMyList: TMyList;
  LMyListFromPointer: TMyList;
  LAddr1: Pointer;
  LAddr2: Pointer;
  LTemp: String;
begin
  LAddr1 := @FMyList;
  LAddr2 := @FMyListPointer;

  LMyList := FMyList;
  LMyListFromPointer := FMyListPointer^;
  LTemp := LMyList[0];
  LTemp := LMyListFromPointer[0];
end;

end.
Setze ich nun einen Haltepunk in der procedure Test bekomme ich folgendes Ergebnis:
LAddr1 und LAddr2 ist fast gleich aber leider nicht komplett gleich. Jedoch müsste die Adresse von beiden doch gleich sein ?
Bsp.
LAddr1 = $38B142C
LAddr2 = $38B1430
In den beiden lokalen Listen stehen die gleichen Werte LTempList in FormCreate. Das würde auch passen.

Die Procedure Timer1Timer kommt nach einer Sekunde.
Die beiden Adressen sind gleich wie in der Test Procedure.
In der LMyList stehen die Werte meiner List.
Das Problem ist, dass die Liste LMyFromPointer leer ist.

Mache ich irgendetwas falsch oder gibt es hierzu bekannte Probleme ?


Ich hoffe ich konnte mein Problem verständlich erleutern und im Voraus bereits vielen Dank für eure Unterstützung.
Angehängte Dateien
Dateityp: zip Pointer.zip (76,0 KB, 0x aufgerufen)

Geändert von TBx ( 4. Dez 2024 um 20:00 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat