16,747
社区成员




//定义部分
//SStrips声明
type SStrip = record
JobType : Integer;
UpDst, DnDst : Double;
MchnID : Integer;
BlksVol : SVolAndSpls;
end;
type TStrips = Array of SStrip;
//SAltern声明
type SAltern = record
BlkObjID : Integer;
MchnGrpID : Integer;
Strips : TStrips;
Tried : ShortInt;
MachEquiped : Boolean;
ValidNow : Boolean;
Wght : Double;
end;
TAlterns = array of SAltern;
Tgt^ := Src^;
AltnCnt := Length(Src.Altns);
if AltnCnt > 0 then begin //如果没有数据,其指向是nil不需要处理
SetLength(Tgt.Altns, AltnCnt);
Tgt.Altns := Copy(Src.Altns);
for AltnIdx := 0 to AltnCnt - 1 do begin
StrpCnt := Length(Src.Altns[AltnIdx].Strips);
if StrpCnt > 0 then begin
SetLength(Tgt.Altns[AltnIdx].Strips, StrpCnt);
Tgt.Altns[AltnIdx].Strips := Copy(Src.Altns[AltnIdx].Strips);
end;
end;
end;
@suiyunonghen CopyMemory我没有试过,我原来是用Move函数写的复制代码
愚见认为Move和CopyMemory均属于内存复制操作,都存在“动态数组部分复制的仅仅是地址”的问题