我在Delphi中有這樣一個基本問題,我無法解決它。如何複製數組?
我的代碼:
注:達諾爾是在下面的方法的地方,但通常它是概念類var.Just它的地方。
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;
這是編譯的,但在執行Move()之後DataR = nil。
第二個嘗試:
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;
這並不在all.Error編譯在第三行(達諾爾:=複製(輸入....)說: 「不兼容類型」
在哪裏。 ?!?這個問題他們是字節的所有陣列
我有一個問題。VirtualFree總是返回false,那麼如何釋放DataR中當前使用的mem?注意DataR不是本地的,而是原始代碼中的類var。請提前感謝您的答案! – 2009-07-13 13:14:59
不,你沒有免費的簡單數組。這樣的數組會自動釋放(例如,當你的類被銷燬時)。注意:如果你有一個對象的引用數組,你必須手動釋放這些對象,因爲只有Delphi會釋放數組。 – smok1 2009-07-13 13:29:22
另請注意,SetLenght會重新分配整個數組,因此請避免大量使用此過程。當使用SetLength使陣列變長時,當前內容保持不變,但是,當縮短時,其中一些內容將會丟失。 – smok1 2009-07-13 13:31:32