如何判断record结构的指针变量是否为null(50分)

  • 主题发起人 主题发起人 20126301
  • 开始时间 开始时间
2

20126301

Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下代码:
Tuser=record
name,
sHttp:string;
age:integer;
end;

procedure testUser;
var user:^Tuser;
begin
if assigned(user) //此处怎么会返回true ?
new(user);
if assigned(user) //此处返回true 这才是正常
user.name:='GondSoft';
user.sHttp:='gondSoft.onchina.net';
dispose(user)
if assigned(user) //怎么还返回true ?
end;
 
procedure testUser;
var user:^Tuser;
begin
if assigned(user) //此处怎么会返回true ?
//answer: Delphi并不将局部变量初始化为全零
new(user);
if assigned(user) //此处返回true 这才是正常
user.name:='GondSoft';
user.sHttp:='gondSoft.onchina.net';
dispose(user)
if assigned(user) //怎么还返回true ?
//answer: Delphi在释放指针之后并不将其置为nil——因为这在多数情况下是多余的
//你因该在Dispose之后手工将其置为nil
end;
 
assigned function是判断指针变量为怎样的状态时才返回True呢? Tks!
 
creation-zy:你的资料我已看过,小生极为敬仰! 下述疑点问题还需你和大家帮忙解答:
1.既然已用dispose释放user指针中的数据,user指针为何不为空? 那它是什么值?
2.将user置为nil就是释放user指针中的数据(没有经过dispose)?
 
>>dispose释放user指针中的数据
这句话有问题。指针实际上就是一个长度为4Bytes的变量——即它所指向的内存区域的地址,
我们使用的主要是它“指向”的内存区。Delphi的New过程和Dispose过程都是为它指向的目标
服务的,内存区的分配和回收与否和指针没有必然关系。——要记住:指针就是地址变量,和在
内存中它所指向的对象(一般是由New过程分配的)有概念性的区别。我们所谓的释放“指针”
其实只不过是释放了它“指向的内存区域”而已,指针还是这个指针,只不过它指向的地址已经
不属于它了——被系统回收了。

>>将user置为nil就是释放user指针中的数据
万万不能这样想当然!理由见上。
 
var user,user1:^Tuser;
begin
new(user);
user.user:='gond';
user1:=user;
dispose(user);
user:=nil;
以上user,user1两个变量本来使用在不同地方,且在不同时刻使用,在这里为演示而放在一起;
我的问题关键:该如何知道user1中是否有内容?
sorry,请求帮忙了~~
 
唉!说了半天效果不明显,还是举一个形象点的例子吧。

小张(user)和小李(user1)是朋友。一天,小张租了一间房子(New),并且在房子里添置了
几个摆设。然后小张把地址告诉了小李(user1:=user;)。第二天小张把房子退给了房东(Dispose),
现在如果小李按照小张给的地址找到那间房子(房子还是在那的,只不过换主人了),房间里的摆设
还可以预测吗?
 
creation-zy,多谢指导! 分数过少,太麻烦您了.
 
后退
顶部