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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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