>>img:array of timage;for i:=0 to 10 do
begin
SetLength(Img,10);
Img[i]:=TImage.create(self);
Img[i].Parent:=self;
Img[i].Width:=200;
Img[i].Height:=80;
Img[i].Left:=10;
Img[i].Top:=80*i+5;
Img[i].Picture.LoadFromFile('路径');
end;
请问我怎样释放创建的这10个图像对象?
begin
SetLength(Img,10);
Img[i]:=TImage.create(self);
Img[i].Parent:=self;
Img[i].Width:=200;
Img[i].Height:=80;
Img[i].Left:=10;
Img[i].Top:=80*i+5;
Img[i].Picture.LoadFromFile('路径');
end;
请问我怎样释放创建的这10个图像对象?
SetLength(Img,10); //这一句不应该放在循环体内
for i:=0 to 10 do
begin
Img[i]:=TImage.create(self);
Img[i].Parent:=self;
Img[i].Width:=200;
Img[i].Height:=80;
Img[i].Left:=10;
Img[i].Top:=80*i+5;
Img[i].Picture.LoadFromFile('路径');
end;释放:
for i:=0 to 10 do Img[i].Free;
SetLength(Img, 0);
for i:=0 to 9 do
begin
Img[i]:=TImage.create(self);
Img[i].Parent:=self;
Img[i].Width:=200;
Img[i].Height:=80;
Img[i].Left:=10;
Img[i].Top:=80*i+5;
Img[i].Picture.LoadFromFile('路径');
end;释放:
for i:=0 to 10 9 Img[i].Free;
SetLength(Img, 0);
for i:=low(img) to high(img) do
begin
Img[i]:=TImage.create(self);
Img[i].Parent:=self;
Img[i].Width:=200;
Img[i].Height:=80;
Img[i].Left:=10;
Img[i].Top:=80*i+5;
Img[i].Picture.LoadFromFile('路径');
end;释放:
for i:=low(img) to high(img) do
Img[i].Free;
SetLength(Img, 0);
我各人认为,这段释放代码有待商榷
for i:=low(img) to high(img) do
Img[i].Free; 我认为应该改为这样:
for i := high(Img) to low(Img) do
Img[i].Free;
测试代码:
首先,
for i := low(Img) to high(Img) do
begin
Img[i].Free;
if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将会显示对话框}
end;
然后: for i := high(Img) to low(Img) do
begin
Img[i].Free;
if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
end;
我个人认为
中午喝高了,会犯这种错误? 这段代码根本不会被执行
for i := high(Img) to low(Img) do
begin
Img[i].Free;
if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
end;
begin
// Img[i].Free;
FreeAndNil(Img[i]);
if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
end;