DELPHI中BUG修改备忘

本文探讨了 Delphi 编程中的几个关键概念,包括 sizeof 函数在不同版本中的表现差异、assigned 函数的正确使用方式、assert 断言的合理运用及注意事项,以及 owner 和 parent 属性的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

1.关于sizeof

同样的代码

varlwindcode : 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属性是指构件的所有者,它负责构件的创建和释放。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值