S
summerlee
Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下代码:
如何判断一个动态的定义对象是否存在呢
{$R *.DFM}
var s:TstringList;
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=TStringList.Create;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
s.nil;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if assigned(s) then
Label1.Caption:='对象存在'
else Label1.Caption:='对象不存在';
end;
end.
初看上述代码无任何问题,可以执行的,但是:请连续点击按钮2之后(这个问题后来我明白了,不能连续对一个对象free两次的,应该先判断一下,我太懒了,没有输入这个语句段)
,就会出错;新的问题又出现了;
assigned是不是确实有用,对于判断一个未知的动态对象?或者有其他方式;另外,又有一个新问题,
当用s.free撤销后,为什么判断语句仍然人为它还存在,是不是没有消沉干净或者用nil之类的方法来作。
在delphi中的例子为:
var P: Pointer;
begin
P := nil;
if Assigned (P) then Writeln ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then Writeln ('You''ll see this');
end;
好像指针的撤销可以用nil来,我修改了它如下
var P: Pointer;
begin
P := nil;
if not(Assigned (P)) then showmessage ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then showmessage('You''ll see this');
end;
为什么freemem后仍然可以assigned到它呢,当令p:=nil后,对象是不存在的,但用nil
方法在上一个tstringlist中不可用。???????
另外,不知大家是否对linux中的mount有印象否?对mount了cdrom后,即使是手动的按光驱弹出按钮也是毫无作用的,很cool吧,我不要要求那么高,目前的想法是:能否动态的下载掉一个windows文件系统,或者别的什么办法,让用户无法访问光驱上的内容?
如何判断一个动态的定义对象是否存在呢
{$R *.DFM}
var s:TstringList;
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=TStringList.Create;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
s.nil;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if assigned(s) then
Label1.Caption:='对象存在'
else Label1.Caption:='对象不存在';
end;
end.
初看上述代码无任何问题,可以执行的,但是:请连续点击按钮2之后(这个问题后来我明白了,不能连续对一个对象free两次的,应该先判断一下,我太懒了,没有输入这个语句段)
,就会出错;新的问题又出现了;
assigned是不是确实有用,对于判断一个未知的动态对象?或者有其他方式;另外,又有一个新问题,
当用s.free撤销后,为什么判断语句仍然人为它还存在,是不是没有消沉干净或者用nil之类的方法来作。
在delphi中的例子为:
var P: Pointer;
begin
P := nil;
if Assigned (P) then Writeln ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then Writeln ('You''ll see this');
end;
好像指针的撤销可以用nil来,我修改了它如下
var P: Pointer;
begin
P := nil;
if not(Assigned (P)) then showmessage ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then showmessage('You''ll see this');
end;
为什么freemem后仍然可以assigned到它呢,当令p:=nil后,对象是不存在的,但用nil
方法在上一个tstringlist中不可用。???????
另外,不知大家是否对linux中的mount有印象否?对mount了cdrom后,即使是手动的按光驱弹出按钮也是毫无作用的,很cool吧,我不要要求那么高,目前的想法是:能否动态的下载掉一个windows文件系统,或者别的什么办法,让用户无法访问光驱上的内容?