Am 2017-01-20 um 07:52 schrieb Martin Schreiber: > On Thursday 19 January 2017 22:50:36 fredvs wrote: >> function array_in_out(arrayin: TArFloat): TArFloat; >> begin >> result := arrayin; >> end; > Do you change items of "arrayin" later? If so the items of the result array > will be changed too, dynamic array assignment copies the data pointer only. > http://www.freepascal.org/docs-html/current/ref/refsu15.html#x39-520003.3.1 > Use > " > function array_in_out(arrayin: TArFloat): TArFloat; > begin > result:= copy(arrayin); > end; > " > if the result array must be independent.
While the original Pascal language was clear and logical, it has become ambiguous with managed types. In this declaration var X : int64; "X" always means the 8 bytes that hold the integer. "@X" always means the 4 bytes of the *address* where the 8 bytes start. Here you are always aware what is meant: Either the data or the address of the data (pointer). In this declaration: var A : array of int64; "A" means the (elements of the) array if you index it as in "A[7]" but it means the (4 byte) pointer to the first element if you use it as function parameter or in assignments. And even worse, *some* managed types (like strings) have "copy-on-write". IMO this is all very confusing and leads to a lot of hard to spot bugs but it cannot be changed anymore. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal