[Gestion mémoire] SetLength sur TDoubleDynArray
Est-ce que vous voyez une différence entre
Code:
1 2 3 4 5 6 7 8
| procedure TC_Differentielle.clone(source : TDoubleDynArray;var destination : TDoubleDynArray);
var i : integer;
begin
SetLength(destination,0); //Effecement de la liste
SetLength(destination,length(source)); //Réallocation
for i:=0 to length(source)-1 do
destination[i] := source[i]; //Affectation
end; |
et
Code:
1 2 3 4 5 6 7 8 9 10
| procedure TC_Differentielle.clone(source : TDoubleDynArray;var destination : TDoubleDynArray);
var i : integer;
begin
SetLength(destination,0); //Effacement de la liste
for i:=0 to length(source)-1 do
begin
SetLength(destination,length(destination)+1);//Réallocation progressive
destination[i] := source[i];//Affectation
end;
end; |
Hormis bien sûr le fait que la deuxième solution est plus lente et un petit peu stupide.
Car en fait, si j'utilise la deuxième solution, j'ai des affectations foireuseuses. A la sortie, je me retrouve avec la liste qui contient n'importe quoi.
Est-ce normal ?