Tengo un problema tan básico en Delphi que no lo puedo resolver.¿Cómo copiar una matriz?
Mi Código:
Nota: Datar es local en los siguientes métodos, pero por lo general es una clase var.Just para el concepto es 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;
Esto compila, pero después de Mover() se ejecuta Datar = nil.
Segundo intento:
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;
Esto no se compila en all.Error en la tercera línea (Datar: = Copiar (entrada ....) diciendo "tipos incompatibles"
Dónde está. ?! el problema todos ellos son de matriz de bytes
Tengo una pregunta. VirtualFree siempre devuelve falso, entonces, ¿cómo puedo liberar la memoria utilizada actualmente con DataR? Nota DataR no es local, sino var de clase en el código original. ¡Gracias de antemano por la respuesta! –
No, no tienes matrices simples gratuitas. Tales matrices se liberan automáticamente (por ejemplo, cuando tu clase está siendo destruida). Nota: si tiene una matriz de referencias a objetos, debe liberar esos objetos manualmente, ya que Delphi solo liberará la matriz. – smok1
También tenga en cuenta que SetLenght reasigna toda la matriz, así que evite el uso intensivo de este procedimiento. Cuando haces la matriz más larga con SetLength, el contenido actual permanece intacto, sin embargo, cuando lo haces más corto, parte del contenido se perderá. – smok1