【发布时间】:2015-05-21 15:03:58
【问题描述】:
我的代码如下:
begin
Application.Initialize;
Application.Title := 'Controle Bancário';
Application.CreateForm(T_DMEstagio, _DMEstagio);
Application.CreateForm(T_frmLogin, _frmLogin);
if (_frmLogin.ShowModal = 1) then
begin
FreeAndNil(_frmLogin);
Application.CreateForm(T_frmPrincipal, _frmPrincipal);
Application.Run;
end;
_DMEstagio.Free;
end.
如果我没有像在代码中那样显式释放 DM,我会收到访问冲突异常,但在另一个应用程序中,代码是这样的:
begin
Application.Initialize;
Application.Title := ' > Sistema de Gestão Comercial <';
if HPrevInst = 0 then
begin
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TIBDM, IBDM);
Application.Run;
end ;
end.
我不必释放 DM,也没有任何异常。这是为什么呢?
【问题讨论】:
-
答案在于您没有显示的代码。大概在 DM 代码的某个地方。将其缩减为 MCVE。甚至使用调试器来识别 AV 发生的位置。
-
回答您的问题“我什么时候需要释放由应用程序创建的数据模块/表单?”从来没有。为什么你有 AV 是完全不同的问题和答案在你的其他代码中......
-
我的 DM 中还没有代码,为了发生问题,我什至不必在我的主表单中输入,如果我一出现就关闭 _frmLogin,我已经收到错误.如果我调试它,我会在尝试销毁 RxHook 时得到 AV,我认为它不正确..
-
@DalijaPrasnikar 我想我发现了它是什么。当我确实在我的主表单上输入时,我没有收到任何 AV,如果您查看我的代码,您会看到
Application.Run;仅在我访问主表单时才被激活,但如果我将此代码放在我的if之前得到一个不同的错误cannot make visible a modal form。我现在该怎么办? -
@DavidHeffernan 问题似乎是
Application.Run只有在登录名和密码正确的情况下才会执行。到目前为止,处理它的最简单方法是确实释放 DM。有什么想法吗?
标签: delphi memory-management datamodule