我有完整的代码:
program List;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils,
Generics.Collections;
type
TMySubList = TList<Integer>;
TMyList = TObjectList<TMySubList>;
var
iIndex1, iIndex2: Integer;
MyList: TMyList;
MySubList: TMySubList;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
MyList := TMyList.Create;
try
for iIndex1 := 1 to 10 do
begin
MySubList := TList<Integer>.Create;
if MyList.Count <> 0 then MySubList := MyList.Last;
MySubList.Add(iIndex1);
MyList.Add(MySubList);
end;
for iIndex1 := 0 to pred(MyList.Count) do
begin
for iIndex2 := 0 to pred(MyList[iIndex1].Count) do write(MyList[iIndex1][iindex2]:5);
writeln;
end;
finally
MyList.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
作为输出我应该有:
1 // MyList[0]
1 2 // MyList[1]
1 2 3 // MyList[2]
1 2 3 4 // MyList[3]
1 2 3 4 5 // MyList[4]
1 2 3 4 5 6 // MyList[5]
1 2 3 4 5 6 7 // MyList[6]
1 2 3 4 5 6 7 8 // MyList[7]
1 2 3 4 5 6 7 8 9 // MyList[8]
1 2 3 4 5 6 7 8 9 10 // MyList[9]
但我有这个结果:
1 2 3 4 5 6 7 8 9 10 // MyList[0]
1 2 3 4 5 6 7 8 9 10 // MyList[1]
1 2 3 4 5 6 7 8 9 10 // MyList[2]
1 2 3 4 5 6 7 8 9 10 // MyList[3]
1 2 3 4 5 6 7 8 9 10 // MyList[4]
1 2 3 4 5 6 7 8 9 10 // MyList[5]
1 2 3 4 5 6 7 8 9 10 // MyList[6]
1 2 3 4 5 6 7 8 9 10 // MyList[7]
1 2 3 4 5 6 7 8 9 10 // MyList[8]
1 2 3 4 5 6 7 8 9 10 // MyList[9]
结束此错误: EInvalidPointer:指针操作无效。 代码很简单,但不明白我错误的地方,或者我忘记添加它的内容,因为我有想要的输出。 再次感谢谁帮我解决了这个问题,非常感谢
答案 0 :(得分:2)
您正在创建MySubList的新实例,然后几乎总是使用指向现有列表的指针覆盖它,然后您可以添加新项目。相反,您需要将项目从上一个列表中单独复制到新列表中:
for iIndex1 := 1 to 10 do
begin
MySubList := TList<Integer>.Create;
if MyList.Count <> 0 then begin
for iIndex2 := 0 to MyList.Last.Count-1 do
MySubList.Add(MyList.Last[iIndex2]);
end;
MySubList.Add(iIndex1);
MyList.Add(MySubList);
end;