【问题标题】:raised exception class segmentation fault (11). delphi android引发异常类分段错误 (11)。德尔福安卓
【发布时间】:2014-08-14 11:45:12
【问题描述】:

早上好,我在重写创建表单时遇到了这个问题,并且在我意识到错误引发异常类分段错误之前 depurei 应用程序时违反了 (11)。

Tfrm_cart.Create constructor (AOwnerr: TComponent; ptipo1: String; PID1: Integer); 
begin 
   try 
     inherited Create (AOwnerr); 
     type: = ptipo1; 
     id: = PID1; 
  except 
     on e: Exception of 
       begin 
         ShowMessage (e.Message); 
       end; 

   end; 

end;

并称之为

 With frm_cart.Create (self, 'INC', 0) of 

      begin 
             frm_cart.Show; 
             Free; 
      End; 

并在 Delphi 中自动创建表单。

有人知道吗??

【问题讨论】:

  • 参见例如this question。你应该写frm_cart := Tfrm_cart.Create(Self, 'INC', 0);,或with Tfrm_cart.Create(Self, 'INC', 0) do。附言不要在构造函数中吞下异常。
  • 我还要添加 frm_cart.Show 将是非阻塞的,因此表单也会在它被绘制到屏幕上之前被销毁。很可能你只需要放弃免费的,因为你给了它一个所有者,以后会销毁它。
  • 您发布的代码不是真正的代码,因为构造函数无法编译。请始终发布真实代码。

标签: android delphi delphi-xe6


【解决方案1】:

从我们在问题中看到的内容来看,您似乎正在尝试创建表单的实例,但随后在另一个实例 frm_cart 上调用了 Show 方法。

这本身肯定是错误的。很可能frm_cart 未初始化,因此出现分段错误。

但是创建也被破坏了,因为您在实例而不是类上调用了构造函数。书中最古老的错误。

然后您在Show 之后立即调用Free,这也否定了您的代码的实用性。

我希望您应该删除 frm_cart 变量并写入:

Tfrm_cart.Create(...).Show;

此外,吞下异常在最好的时候是不好的,但在构造函数中是一个严重的错误。当构造函数引发异常时,表示对象尚未正确创建。试图继续,好像问题从未发生过一样,只是推迟了痛苦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多