Copie de array of array of variant
Bonjour,
De toutes les discussions et littératures que j'ai lues, je pensais benoîtement que la fonction copy faisait une copie complète d'un tableau dynamique, et non pas seulement une affectation de pointeur. Or si je fais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
type
taoaov=array of array of variant;
var
a, b: taoaov;
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: integer;
begin
// détermination de la taille du tableau
setlength(a, 5, 5);
// et affectation de n'importe quoi
for i:=0 to high(a) do
begin
for j:=0 to high(a[i]) do
begin
a[i, j]:=i*j;
end;
end;
// copie du tableau a dans b
b:=copy(a);
// au débugage les pointeurs vers a et b sont différents !
// @a=$A3EFF8
// @b=$A3EFFC
// affectation d'une valeur à b[0, 0]
b[0, 0]='x';
// a[0, 0] devient aussi x
// à quoi sert copy alors ? autant écrire b:=a ?
end; |
NB : j'ai aussi essayé à la place de copy :
Code:
Move(Pointer(a)^, Pointer(b)^, SizeOf(a[0]) * Length(a);
Mais ça fait pareil.
J'ai sans doute, ENCORE, loupé quelque chose ...
Faut-il vraiment passer par une double boucle pour faire une copie indépendante ?
Merci de vos lumières ;o)
Yvan