Je veux créer un groupe d'enregistrements (RWell) et les stocker dans un tableau dans un certain ordre. Ensuite, je veux créer un nouveau tableau (disposition différente) et réorganiser les enregistrements en elle. Bien sûr, je ne veux pas dupliquer des données dans la RAM, donc je pense que dans le second tableau, je devrais mettre des pointeurs sur les enregistrements dans le premier tableau. Cependant, je ne peux pas faire ça. Quelqu'un peut-il dire ce qui ne va pas avec le code ci-dessous? MerciTableau de (pointeurs vers un enregistrement)
Type
RWell= record
x: string;
i: integer;
end;
PWell= ^RWell;
RWellArray= Array[0..12, 0..8] of RWell;
procedure TClass1.CreateWells
var
WellMX: RWellArray;
begin
{ should I initialize the WellXM here? }
{ note: WellXM is a static array! }
other stuff
end;
var Wells: array of PWell;
procedure TClass2.AddWell(aWell: RWell);
begin
aWell.Stuff:= stuff; {aWell cannot be readonly because I need to change it here}
SetLength(Wells, Length(Wells)+ 1); { reserve memory }
Wells[High(Wells)]:= @aWell;
end;
procedure TClass3.DisplayWell;
var CurWell: RWell;
begin
CurWell:= CurPrimer.Wells[iCurWell]^; <--- AV here (but in debugger the address is correct)
end;
par Rob K. Solved
Vous allez recevoir des commentaires sur votre technique d'ajout à la fin du tableau dynamique. Il peut être inefficace et peut fragmenter la mémoire. Vous feriez mieux de ne faire qu'une seule fois le tableau dont vous aurez besoin, puis d'assigner des valeurs à l'élément non assigné suivant. Une autre option consiste à utiliser un 'TList', ce qui est très bien pour stocker des pointeurs. À partir de Delphi 2009, il pourrait même être de type sécurité comme 'TList'. –
Je ne connais pas la taille de ce tableau à l'exécution. Et je sais que ce n'est pas optimal quand je règle sa longueur. Mais c'est très petit (moins de 600 entrées) donc la fragmentation sera mineure. Je ne vais pas déranger le changer maintenant. Merci pour la suggestion :) – Ampere
Je serais d'accord qu'il est préférable d'utiliser une liste ici. –