Um das Problem mal zu veranschaulichen:
Delphi-Quellcode:
program Project773;
{$APPTYPE CONSOLE}
function GetP(S: string): PAnsiChar;
begin
Result := PAnsiChar(AnsiString(S));
end;
var
P1: PAnsiChar;
P2: PAnsiChar;
begin
P1 := GetP('Hallo Welt');
Writeln('P1:', P1);
P2 := GetP('Hurz');
Writeln('P1:', P1);
Writeln('P2:', P2);
Readln;
end.
Der Result von GetP ist quasi in dem Moment schon ungültig, wo er zurückgegeben wird, weil er auf irgendwo auf den Stack zeigt - und zwar auf eine Stelle, die nicht mehr gültig ist.