16,748
社区成员
发帖
与我相关
我的任务
分享
var
i: integer;
mo: TMyObj; //自定义对象,带有一个inti()方法,会将该对象的几个成员变量赋随机值
moArray: Array of Tmyobj; //Tmyobj类型的数组
begin
//动态数组需要分配空间
SetLength(moArray,10);
for i:=Low(moArray) to High(moArray) do
begin
mo := Tmyobj.Create;
mo.Init();
moArray[i] := mo; // !!!!这里的i并不随每轮循环递进,而是一个固定值,导致数组的所有成员指向同一个对象
end;
//用完之后,要释放内存,跟java这点是不一样
for i:=Low(moArray) to High(moArray) do moArray[i].Free;
SetLength(moArray,0);
end;
[/quote]谢谢,数组是setLength了的,忘了写在帖子里,我再试试,可能问题出在别处
不过有一点还是很可疑:只要在循环体内加入showMessage(inttostr(i)),程序立马就正常了
var
i: integer;
mo: TMyObj; //自定义对象,带有一个inti()方法,会将该对象的几个成员变量赋随机值
moArray: Array of Tmyobj; //Tmyobj类型的数组
begin
//动态数组需要分配空间
SetLength(moArray,10);
for i:=Low(moArray) to High(moArray) do
begin
mo := Tmyobj.Create;
mo.Init();
moArray[i] := mo; // !!!!这里的i并不随每轮循环递进,而是一个固定值,导致数组的所有成员指向同一个对象
end;
//用完之后,要释放内存,跟java这点是不一样
for i:=Low(moArray) to High(moArray) do moArray[i].Free;
SetLength(moArray,0);
end;