J'ai un tel problème de base dans Delphi, je ne peux pas le résoudre.Comment copier une matrice?
Mon code:
Note: Datar est locale dans les méthodes ci-dessous, mais en général il est une classe var.Just pour le concept, il est local.
class procedure TCelebrity.BeginRead(var input:Array of byte);
var DataR:Array of byte;
begin
VirtualFree(@DataRead,High(DataRead),MEM_RELEASE);
SetLength(DataR,Length(input));
Move(input,DataR,Length(input));
end;
Ceci compile, mais après que Move() est exécuté DataR = nil.
Deuxième essai:
class procedure TCelebrity.BeginRead(var input:Array of byte);
var DataR:Array of byte;
begin
VirtualFree(@DataRead,High(DataRead),MEM_RELEASE);
SetLength(DataR,Length(input));
DataR := Copy(input,0,Length(input));
end;
Cela ne compile pas à all.Error à la troisième ligne (Datar: = Copier (entrée ....) en disant "types" incompatibles
Où est. ! le problème Ils sont tous tableau d'octets
J'ai une question.Le VirtualFree renvoie toujours faux alors comment puis-je libérer le mem actuellement utilisé avec DataR? Note DataR n'est pas local, mais classe var dans le code original. Merci d'avance pour la réponse! –
Non, vous n'avez pas de tableaux simples libres. De tels tableaux sont libérés automatiquement (par exemple lorsque votre classe est détruite). Note: si vous avez un tableau de références à des objets, vous devez libérer ces objets manuellement, car seul le tableau sera libéré par Delphi. – smok1
Notez également que SetLenght réalloue l'ensemble du tableau, évitez donc l'utilisation intensive de cette procédure. Lorsque vous définissez le tableau plus long avec SetLength, le contenu actuel reste intact. Toutefois, lorsque vous le raccourcissez, une partie du contenu est perdue. – smok1