Hallo,
ich mache gerade etwas mit Zeigern und frage mich ob folgender Code so OK ist?
Delphi-Quellcode:
type
TRec = record
S: string;
A: array of string;
end;
PRec = ^TRec;
var
P1: PRec;
P2: Pointer;
I : Integer;
begin
Writeln(SizeOf(TRec));
New(P1);
P1^.S := 'test';
SetLength(P1^.A, 0);
P2 := P1;
for I := 1 to 10 do
with PRec(P2)^ do
begin
S := S + 'a';
SetLength(A, Succ(Length(A)));
A[High(A)] := 'test' + IntToStr(Length(A));
end;
with PRec(P2)^ do
begin
Writeln(PRec(P2)^.S);
for I := Low(A) to High(A) do
Writeln(A[I]);
end;
Readln;
end.
Mit New() wird ja, glaube ich, nur Speicher für 2 Zeiger angelegt und nicht für beliebig lange Strings, oder?
Ist es dann OK den String und das Array wie oben zu verändern/vergrößern oder kann es da "knallen"? Also wird automatisch neuer Speicher angefordert?
Eine andere Frage ist, ob es einen Unterschied macht, wenn ich PRec(P2)^.S oder TRec(P2^).S schreibe?
Danke für jede Antwort