On 15 Dec 2008, at 21:29, Kevan Hashemi wrote:
Dear FPC,
fancy:=new(fancy_type); // or something similar, I usually use
GetMem not New
SetLength(fancy.first, 10, 20);
SetLength(fancy.second, 10, 20);
SetLength(fancy.third, 300);
Nice. I see how it works. Thank you very much (Felipe and Florian)
for your answers. I'll try porting some code to FPC.
One important different to keep in mind between dynamic arrays and
regular arrays (including those defined using schema types): dynamic
arrays are reference counted and copies are always shallow copies.
This means that in this code:
var
a, b: array of real;
begin
setlength(a,10);
b:=a;
a[5]:=1.0;
end.
at the end, b[5] will also be 1.0. To make a deep copy, use the
following code after assignment:
setlength(b,length(b));
Note that this will only make the "first" level unique. I.e., if you
have:
var
a, b: array of array of real;
begin
setlength(a,10,10);
b:=a;
setlength(b,length(b));
a[5][5]:=1.0;
writeln(b[5][5]);
end.
then this will still print 1.0. I don't think there is an easier way
to make a full deep copy than using a loop to iteratively call
setlength on all sub-arrays as well:
var
a, b: array of array of real;
i: longint;
begin
setlength(a,10,10);
b:=a;
setlength(b,length(b));
for i:=0 to high(b) do
setlength(b[i],length(b[i]));
a[5][5]:=1.0;
writeln(b[5][5]);
end.
Jonas
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal