저는 Delphi에서 이러한 기본적인 문제가 있습니다. 해결할 수 없습니다.배열을 복사하는 방법은 무엇입니까?
내 코드 :
참고 : DATAR 아래의 방법에서 지역이지만, 보통은이 지역의 개념에 대한 클래스 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에 DATAR를 컴파일되지 않습니다 : = 복사 (입력 ....) "호환되지 않는 유형"라고
가 있습니다. ?!? 문제 그들은 바이트의 모든 배열입니다
하나의 질문이 있습니다. VirtualFree는 항상 false를 반환하므로 현재 DataR에 사용되는 mem을 해제하려면 어떻게합니까? 참고 DataR은 로컬이 아니지만 원래 코드의 클래스 var입니다. 미리 대답 해 주셔서 감사합니다! –
아니요, 무료 간단한 배열이 없습니다. 이러한 배열은 자동으로 해제됩니다 (예 : 클래스가 소멸 될 때). 참고 : 객체에 대한 참조 배열이있는 경우 해당 객체를 수동으로 해제해야합니다. 배열 만 Delphi에서 해제되기 때문입니다. – smok1
SetLenght는 전체 배열을 다시 할당하므로이 절차를 많이 사용하지 마십시오. SetLength를 사용하여 배열을 길게 만들면 현재 내용은 그대로 유지되지만 짧게 만들면 일부 내용이 손실됩니다. – smok1