【发布时间】:2020-09-05 22:52:55
【问题描述】:
我无法编译这种和平的代码。为什么? 在编译得到 E2010 不兼容的类型:'TBoundArray' 和 'Array'
代码试图通过向 subArray 末尾的每个维度推送相同的值+10000 来更改传入数组。
function Tpt.T(var arr: array of TBoundArray): TBoundArray;
var
i:Integer;
j:Integer;
size:Integer;
const movObjInd: Integer = 10000;
begin
for i := Integer(0) to Length(arr) do
begin
size:= Length(arr);
setLength(arr[i],(Length(arr[i])+1)*2);
j:=0;
while j < size+1 do
begin
if arr[i][j] = 0 then
begin
inc(size);
Continue;
end;
Inc(size);
arr[i][size]:= arr[i][j] + movObjInd;
end;
end;
result:= arr;
end;
【问题讨论】:
-
您的 for 循环在其最后一次迭代中访问越界。
-
我怀疑
while循环也存在边界问题。我认为size:= Length(arr)应该是size:= Length(arr[i]) -
是的,有问题,我编译后解决了
procedure TRptZakaz_AL.addTransObjs(var arr: array of TBoundArray); var i:Integer; j:Integer; size:Integer; const movObjInd: Integer = 10000; begin for i := 0 to Length(arr)-1 do begin if arr[i][0] = 0 then Continue; size:= Length(arr[i]); setLength(arr[i],size*2); j:=0; while j < size do begin if arr[i][j] = 0 then begin inc(j); Continue; end; arr[i][size+j]:= arr[i][j] + movObjInd; Inc(j); end; end; end;
标签: delphi delphi-2010