delphi free 判断

一个对象free后为什么还能访问??怎么判断一个对象已经FREE??assigned判断不了Free我环境winxp+d7... 一个对象free后为什么还能访问??
怎么判断一个对象已经FREE??
assigned 判断不了Free
我环境 winxp + d7
展开
 我来答
kcxnvbdbd
2015-05-25 · TA获得超过523个赞
知道小有建树答主
回答量:885
采纳率:50%
帮助的人:619万
展开全部
第一个问题:
打个比方,比如删除电脑上的文件,文件本身所在的磁盘空间并不是被真的删除,只是删除了一个标记,告诉操作系统可以用这块磁盘了,如果这块区域没被重新写入,那文件是可以被恢复的
同理
引用的对象被free了后,对象本身所在的内存区域的标记被删除,但所指向的内存区域的值还是没变的,同时该引用指向的内存地址仍然是之前对象本身所在的区域,所以仍能读出数值来,但此时引用本身已经属于野指针了,如果该内存区块被其他地方申请使用,那么指针访问的值就是错误的,或者直接报指针错误。

第二个问题:
仅仅free了,后面是没法有效判断对象已经free了。正确的做法是free后,再设置指针或者引用为nil。后面再通过判断指针是否为nil来判断对象是否被free

如 a.free;
a := nil;
追问
线程类tthread当执行结束后自动free,怎么给它赋值nil
追答
线程自动free,在某个地方肯定有这个thread 的引用吧,你在线程方法的最下面,添加把这个引用置为nil代码即可。虽然此时这个对象还没有被释放,但剩下的你不用管了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式