zoukankan      html  css  js  c++  java
  • DELPHI中BUG修改备忘

    1.关于sizeof

    同样的代码
    var   LWindCode : array [0..15] of char;
    begin
       showmessage(inttostr( sizeof(LWindCode)));
    end;
    在Delphi7和Delphi2009下结果分别是16/32,为什么?


    这是因为widechar和AnsiChar的问题,2009默认的是WideChar了,而Delphi7是AnsiChar,导致String的长度也发生了变化!以后要注意了!

    2.关于Assigned
      Assigned只是判断当前值是否为空,而不判断当前指着的内存是不是被释放,因此释放的时候要这样写:
    if assigned(frm) then
    begin
       frm.close;
       frm:=nil;
    end;
    或者
    if assigned(frm) then
    begin
    frm.close;
    freeandnil(frm);
    end;

     3.关于assert(断言)

    用法:   Assert(表达式);
    如果为假, assert会产生一个EAssertionFailed异常,显示信息为:
       Assertion Failed (C:\src\unit1.pas, [size=+0]line 34)
    当你不想再使用这些检查时,可以使用 {$ASSERTIONS OFF} 或 {$C-} 编译指令.
    要想使Assert在整个项目中失效,   关闭Project Options | Compiler | Assertion 选项
    缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
    用法总结与注意事项:
    1)在函数开始处检验传入参数的合法性
    2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
    3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题。
    4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
    5)有的地方,assert不能代替条件过滤 

    4.关于Owner和Parent的区别

    Parent属性是指构件的包容器,构件只能在此范围内显示和移动

    Owner属性是指构件的所有者,它负责构件的创建和释放。

  • 相关阅读:
    Django框架-选项卡加active类的方案
    Django框架-管理后台项目之分页实现
    Django框架-Auth组件
    Django框架-Form组件
    Django框架-AJAX
    Django框架-中间件
    Django框架-cookie与session
    Django框架-Django模型(models)系统
    Django框架-Django视图(views)系统
    Django框架-Django模板(template)系统
  • 原文地址:https://www.cnblogs.com/enli/p/1740084.html
Copyright © 2011-2022 走看看