不知您是笨蛋,还是我是笨蛋,关于Delphi的大Bug (转)

本文通过一段精简的Delphi代码示例揭示了一个可能导致程序崩溃的Bug,涉及TStringList对象的不恰当释放问题,强调了正确使用Free方法的重要性。

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

不知您是笨蛋,还是我是笨蛋,关于Delphi的大Bug (转)[@more@]

我写了一个段落,在下面这个地址,Delphi的大bug,您不用费神去看,我在此重复。

但是我觉得后面的评论您可以一瞧。

.NET/Develop/read_article.ASP?id=12525">http://www.youkuaiyun.com/Develop/read_article.asp?id=12525

原来的代码是这样,

procedure TForm1.Button1Click(Sender: Tobject);
var
  strings :TStringList;
begin
  if not Assigned(strings) then
  begin
  strings :=TStringList.Create;
//  ShowMessage('sfdasfd');如果加上这样或那样的句子就没有问题,否则,哈哈.
  end;
  strings.free;
  strings := nil;
end;


实际上,我要说的重点只有一行,那就是strings.Free;这一行。

但是恰好有别的代码存在,引起了很多不必要的麻烦,我也曾经强调过几次,但是核心的代码还是被其余的花环罩住了。而且总是引起误会,所以

我重写一遍代码,如下所示:

procedure TForm1.Button1Click(Sender: TObject);
var
  strings :TStringList;
begin
  strings.free;
end;

事实上,这个代码中的TStringList类可以替换成任何您想要去试一试的类。

这样,如果您使用cpu观察窗口就能发现东西,但是如果不使用它,您就按下Ctrl+F2

终止程序吧。

这个标题是否也有点 笨蛋的意思,我不知道,反正是中文。您和我都能看懂。

实际上这段代码的主旨在于提醒您注意对象的正确使用,至于这段代码出错的原因,

我想,确实是编译器的一个疏漏,但是如果您对类和对象的内存结构没有什么研究的话,我建议您:一、放任,二、钻研它。


如果有空的话,我想,我该写一大段文字出来,以烹各位朋友(哈哈)。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992184/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992184/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值