Zitat von
Motzi:
Dank der erweiterten String-Syntax reserviert Delphi im ersten Beispiel den Speicher selbst (völlig transparent)
Du redest hier von
strings.
silent hat aber auch im ersten Beispiel einen PChar.
Im ersten Beispiel setzt der Compiler den PChar p auf die Adresse, an der die hard-coded Zeichenkette 'bla' steht. Und diese liegt in einem schreibgeschützten Speicherbereich. Es wird also kein Speicher durch Compiler Magic reserviert.
Folgendes Beispiel verdeutlicht das am besten:
Delphi-Quellcode:
var
P: PChar;
begin
P := 'Test';
P[0] := 'F'; // <-- Schutzverletzung.
end;