On 25/04/2012 21:11, Amir wrote:

I am not sure what you mean be "your program is not valid". I am initializing Result. Modify its content and ...

I already observed that if I use either shortstring or use indices to modify Result, this problem does not occur. But still I can't see what causes this problem. And I believe it is a bug, isn't it?


Try the program at the end.
it will print "x" !!!

Strings a pointers. And they do "copy on write"

   s2 := s1;
means that s1 and s2 point to the same memory (not only the same content, but the same location in mem)

Internally the strig knows, that the memory is used by 2 strings
  s2[1] := 'a';
will trigger "copy on write". So s2 gets copied first then modified

using pchar does not trigger such copies.

so the cod modifies the constant you use for initialization.

try
UniqueString(Result);



program Project1;
function Foo: AnsiString;
begin
  Result:= '                ';
end;

var
  s: String;
  p: PChar;
begin
  s := Foo;
  p := @s[1];
  p^ := 'x';
  writeln(Foo);
readln;
end.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to