不知您是笨蛋,还是我是笨蛋,关于Delphi的大Bug
2006-02-04 13:35:06 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

我写了一个段落,在下面这个地址,Delphi的大Bug,您不用费神去看,我在此重复。
但是我觉得后面的评论您可以一瞧。
http://www.csdn.net/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
终止程序吧。
这个标题是否也有点 笨蛋的意思,我不知道,反正是中文。您和我都能看懂。
实际上这段代码的主旨在于提醒您注意对象的正确使用,至于这段代码出错的原因,
我想,确实是编译器的一个疏漏,但是如果您对类和对象的内存结构没有什么研究的话,我建议您:一、放任,二、钻研它。
更多精彩
赞助商链接