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.