有关资源释放的问题 这样作不太合适。我的意见是,去掉unit2和unit3中窗体对象实例定义和单元初始化部分的代码,然后在form1的button1单击事件中动态定义、创建、showmodal和释放该窗体。这样就不会有问题了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我还是不明白为什么在finalization里写释放代码会出错,我的一个工程也用到了这种方法,但就是在finalization释放的时候出错,后来只好不释放。不过因为程序用到的资源在程序退出的时候都会释放,我也就没有管他,但我还是想知道为什么会这样。 我已经知道你的程序为什么出错了。我给你列举出你所写程序运行时的事件发生次序,你就明白了:程序开始运行,Project1被装载入内存;Unit3 initialization部分开始运行;Form3对象初始化;Unit2 initialization部分开始运行;Form2对象初始化;Unit1 装入;Forms initialization部分开始运行;Appliacation对象初始化;Form1对象初始化;Form1 Show;…Form1 Close;Forms finalization部分执行;Form1释放;Form2释放;<请注意此处>Form3释放;<请注意此处>Application释放;Unit1 退出;Unit2 finalization部分执行;<出错!>Unit3 finalization部分执行;<出错!>程序运行结束。你一定奇怪,为什么Form2和Form3在Application释放前就释放了,而不是在其所在单元的finalization部分释放。答案在你的 initialization 部分。在那里,你的Form2和Form3的Owner都是Application,根据Delphi的规定,所有的对象都将在其Owner释放之前自动释放,所以在Application对象释放前,Form2和Form3都被释放了。那么,finalization部分里不是判断对象是否为空指针吗?呵呵,在Delphi里,对象占用的资源释放,但它所占据的变量地址(对象变量指针)并未释放,对它的释放方法是必须将对象指针显式赋值为nil。相信你已经明白如何去作了,那就是,在单元初始化部分,将窗体对象的Owner指定为nil,这样就不会出错了。不过,我还是建议你,没有特殊原因最好不要在单元的初始化部分初始化对象变量。以上所述仅供参考,希望能对你有所帮助。 如何禁用olecontainer控件的拷贝功能? 如何得到外网IP 请问如何FASTREPORT3.0中动态的在主数据区中动态创建MEMO? fastreport问题? 有没有好一点做delphi控件的书? 哪位可以说一下enumdisplaysettings()这个函数的用法? 帮我看以下这段程序 ※※※※快来看,偶有大量的9成新编程书减价处理(深圳白石洲)※※※※ 关于ListView中返回被check了的值的处理,高分!!!!!!!!! 使用了哪些控件才算是使用了midas? !!!!!“net send ”长度限制问题 问一个菜菜的问题:
我给你列举出你所写程序运行时的事件发生次序,你就明白了:程序开始运行,Project1被装载入内存;
Unit3 initialization部分开始运行;
Form3对象初始化;
Unit2 initialization部分开始运行;
Form2对象初始化;
Unit1 装入;
Forms initialization部分开始运行;
Appliacation对象初始化;
Form1对象初始化;
Form1 Show;
…
Form1 Close;
Forms finalization部分执行;
Form1释放;
Form2释放;<请注意此处>
Form3释放;<请注意此处>
Application释放;
Unit1 退出;
Unit2 finalization部分执行;<出错!>
Unit3 finalization部分执行;<出错!>
程序运行结束。你一定奇怪,为什么Form2和Form3在Application释放前就释放了,而不是在其所在单元的finalization部分释放。
答案在你的 initialization 部分。
在那里,你的Form2和Form3的Owner都是Application,根据Delphi的规定,所有的对象都将在其Owner释放之前自动释放,所以在Application对象释放前,Form2和Form3都被释放了。
那么,finalization部分里不是判断对象是否为空指针吗?呵呵,在Delphi里,对象占用的资源释放,但它所占据的变量地址(对象变量指针)并未释放,对它的释放方法是必须将对象指针显式赋值为nil。相信你已经明白如何去作了,那就是,在单元初始化部分,将窗体对象的Owner指定为nil,这样就不会出错了。不过,我还是建议你,没有特殊原因最好不要在单元的初始化部分初始化对象变量。
以上所述仅供参考,希望能对你有所帮助。