动态创建1000个label,如何释放内存
var
a:array of tlabel;
begin
setlength(a,1000);
for i:=0 to 999 do
begin
创建1000个label;
end;
end;
这1000个label如何释放?
[解决办法]
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private a:array of tlabel; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var i:integer;beginsetlength(a,1000);for i:=0 to 999 do begin a[i] := TLabel.Create(self); a[i].Left := i+5; a[i].top := i+5; a[i].Caption := ' Label'+ IntToStr(i); a[i].Parent := Form1; end;end;procedure TForm1.Button2Click(Sender: TObject);var i:integer;begin for i := Length(a)-1 downto 0 do a[i].free;end;
[解决办法]
for i:=low(a) to hight(a) do
a[i].free;
设置为0长度的数组,如setlength(a,0)可以认为就是释放数组,有人说a:=nil也是释放,不过这2个都没意义
因为动态数组是在堆上分配的,过程结束自动释放,不用手工去处理,只要把创建的控件释放就行了