Dabei habe ich es mit folgendem Code getestet. Wen ich nur PChar verwende, funktioniert es wie erwartet auch mit heaptrc.
Aber sobald ein String ins Spiel kommt, dann knallt es, sobald man heaptrc verwendet.
Wieso knallt dies ?
Mir ist bewusst, das man bei späteren Verwendung etwas beachten muss, aber das es schon bei der Zuweisung knallt, verwundert mich.
Das ich das ausprobieren wollte, hängt zusammen, das man vielfach user_data an gebunden C-Funktionen übergeben kann.
Dabei wollte ich das Verhalten mit einem Pascalstring testen.
Code: Alles auswählen
program project1;
uses
strings, heaptrc;
type
THuman = record
Name: pchar;
s: string;
end;
PHuman = ^THuman;
var
p:Pointer;
procedure setHuman;
var
h: PHuman;
begin
h := GetMem(SizeOf(THuman));
h^.Name := strnew('Max');
WriteLn('Hier bumm');
h^.s := 'bumm'; // Hier knallts mit heaptrc
WriteLn('io.');
p:=h;
end;
procedure printAndFreeHuman;
var
h: PHuman;
begin
h:=p;
WriteLn('Name: ', h^.Name);
WriteLn('s: ', h^.s);
Freemem(h^.Name);
Freemem(h);
end;
begin
setHuman;
printAndFreeHuman;
end.