frame 的问题(20分)

  • 主题发起人 主题发起人 zhj218
  • 开始时间 开始时间
Z

zhj218

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么有的时候在释放frame的时候会出现“内存地址存储违例”的提示,有什么方法可以解决
 
你是不是重复释放了?
 
从create 到 free 执行一两次不会出现这样的问题,但是执行多次的时候就会出现上述问题
 
请多指教
 
大富翁论坛号称高手如云,热心的人却太少了
 
为什么从create 到 free 多次后会出现“内存地址存储违例”的提示,有什么方法可以解决
 
不要用Free释放
用frame:=nil
 
FreeAndNil(Frame);
 
还是会出现上述问题,不知什么原因
 
楼上应该可以解决你的问题
 
不行,还会出现“内存地址存储违例”的提示的问题,
不知是什么原因, 执行的时候,有几次会出现,有几次不会出现,重复十次以上肯定会出现上述问题
 
if frame<>nil then
frame.free;
frame:=nil;
 
还是不行,我是form里动态创建frame链接到panel上,然后在frame里制作关闭按钮
事件:
if self<>nil then begin
self.free;
self:=nil;
end;
但是在释放的时候老是会弹会错误事件
 
Close事件中写上:
action:=cafree;

Des..事件中写上:
frmFormName:=nil;

在打开中叛断用:
if not assg..ed(frmFormName) then begin
frmFormName:=TfrmFormName.create(self);
.....
end;
 
同意楼上的!
 
frame上没有close等事件
 
哈哈,我也遇到这样的问题了!
Frame没有Close事件;
因为Frame是动态创建的,调用
self.free;是不能释放Frame的,
应该有Frame的owner负责释放Frame;
解决方法,是用消息解决,释放时Frame向其owner发送消息,由owner
释放Frame
 
请教雨人:
请问具体代码怎么写
 
请问具体代码怎么写
 
在Owner中写个for找试试:(代码没有经过测试)
procedure(AFrameName: string)
begin
for i:=0 to Owner.ComponentCount - 1 do
begin
if (Owner.Components as TFrame) and (Owner.Components.Name = AFrameName) then
begin
Owner.Components.Free;
Owner.Components := nil;
end;
end;
end;
实事上就算不是由Owner来释放效果也是应当一样的。这个问题我想Borland的工程师不会
没有考虑到吧。因为释放的本质就是把指针指向的内存释放。不可能自己释放的指针和
owner中释放的指针不是同一个吧。再看看自己的程序
 
后退
顶部