组件的生成与释放(60分)

  • 主题发起人 主题发起人 qlw
  • 开始时间 开始时间
Q

qlw

Unregistered / Unconfirmed
GUEST, unregistred user!
试验代码如下

procedure TForm1.Button1Click(Sender: TObject);
begin
aa[1]:=Tedit.Create(self);// 数组元素赋值
end;

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 2 do begin
if aa<>nil then //如元素非空,则释放 ???
showmessage(inttostr(i)+'is not nil,freeing it...');
aa.free;
end;
end;

跟踪显示aa[1]并未被释放,即总是不为空
出现访问冲突,请问如何解决?
 
用这句if assigned(aa) then
 
我看你这代码有问题,应该加上gegin..end
if assigned(aa) then begin
showmessage(inttostr(i)+'is not nil,freeing it...');
aa.free;
end;
 
不行,怎么释放那个数组里还是有东西
而再释放就出错
邪门了
大家可以试一下上面的代码
 
free以后在nil一次吧,从Delphi4开始free以后就不是nil了
 
Fudei+老屯 = OK!
 
设为nil就好了
能解释一下为什么吗
如果不为空里面又是什么呢
 
XXX.Free以后,XXX所指类实例所占内存空间释放,XXX只是指针,这时它指向一个
没有任何意义的内存空间!所以再释放时就会出错!
 
我将元素释放后,元素仍不为空,那么里面又有什么东西呢?
 
呵呵,从后往前 free 就行乐
 
多人接受答案了。
 
后退
顶部