Mam taki podstawowy problem w Delphi, nie mogę go rozwiązać.Jak skopiować tablicę?
mój kod:
Uwaga: Datar jest lokalny w poniższych metod, ale zazwyczaj jest to klasa var.Just do koncepcji, że to lokalny.
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;
To kompiluje, ale po wykonaniu funkcji Move() DataR = nil.
Druga próba:
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;
nie skompilować na all.Error w trzeciej linii (Datar: = Copy (wejście ....) mówiąc: "niezgodne typy"
Gdzie jest. ?!
Mam jedno pytanie. VirtualFree zawsze zwraca wartość false, więc w jaki sposób mogę zwolnić pamięć obecnie używaną z DataR? Uwaga DataR nie jest lokalna, ale klasa var w oryginalnym kodzie. Z góry dziękujemy za odpowiedź! –
Nie, nie masz darmowych prostych tablic. Takie tablice są automatycznie zwalniane (na przykład, gdy twoja klasa jest niszczona). Uwaga: jeśli masz tablicę odniesień do obiektów, musisz ręcznie zwolnić te obiekty, ponieważ tylko tablica zostanie zwolniona przez Delphi. – smok1
Należy również pamiętać, że SetLenght ponownie przydziela całą tablicę, więc należy unikać intensywnego korzystania z tej procedury. Po wydłużeniu tablicy przy użyciu funkcji SetLength obecna zawartość pozostaje nienaruszona, jednak po jej skróceniu część zawartości zostanie utracona. – smok1