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 :
NB : j'ai aussi essayé à la place de copy :
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;
Mais ça fait pareil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Move(Pointer(a)^, Pointer(b)^, SizeOf(a[0]) * Length(a);
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
Partager