gpt4 book ai didi

delphi - 如何检查对象引用是否仍然有效?

转载 作者:行者123 更新时间:2023-12-03 15:03:37 26 4
gpt4 key购买 nike

我在尝试确定对对象的引用是否有效时遇到问题。但它似乎返回了奇怪的结果。

procedure TForm1.Button1Click(Sender: TObject);
var form1 : TForm;
ref2 : TControl;
begin
form1 := TForm.Create(nil);
form1.Name := 'CustomForm';
form1.Parent := self; //Main Form

form1.Show;

ref2 := form1;
showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
freeandnil(form1);
showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
end;

第一条显示消息返回 - “TForm - CustomForm - True”(正如我所期望的那样)。

第二个显示消息返回 - “TForm - - False”。我实际上希望出现某种访问冲突,然后我可以捕获这种访问冲突并知道该引用无效。

在我的应用程序中,我需要在创建随机 TForm 后代时编译它们的列表,然后稍后检查它们是否已消失(或不可见)。不幸的是,它是一个基于插件的系统,所以我可以更改所有这些表单来发布“我完成了消息”。

这样的代码可以安全使用吗(假设我实际上正在检查访问违规)?有人知道发生了什么吗?

谢谢

最佳答案

问题在于,访问的内存很可能仍然由 Delphi 内存管理器保留。在这种情况下,Windows 不会生成任何类型的访问冲突,因为该内存属于您!

一种可能性是切换到不同的 Delphi 内存管理器,它可以检测已释放对象的使用。例如,FastMM4 有多项“内存卫生”检查,这对于调试非常有用,但即便如此,您也无法立即捕获所有这些错误。

您可以download FastMM4 from SourceForge .

关于delphi - 如何检查对象引用是否仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com