var
m:tmemorystream;
begin
m:=tmemorystream.Create ;
if m<>nil then
showmessage('zai');
m.Free ;
if m<>nil then
showmessage('free');
end;运行后,先出现zai对话框,表示m创建已存在,然后又出现free对话框,这是为什么?m不是已经释放了吗?为什么不为空呢?
m:tmemorystream;
begin
m:=tmemorystream.Create ;
if m<>nil then
showmessage('zai');
m.Free ;
if m<>nil then
showmessage('free');
end;运行后,先出现zai对话框,表示m创建已存在,然后又出现free对话框,这是为什么?m不是已经释放了吗?为什么不为空呢?
解决方案 »
- Delphi程序中如何批量修改(*.txt)为(*.html)?谢谢!
- 浮点格式化问题,请教,谢谢!
- 我想编写一个腾讯通的机器人,不知道该从哪里下手,请高手指教,谢谢!
- 欲求delphi中tms组件包的下载地址,请各位达人指点,谢谢
- 刚学DELPHI,问几个DELPHI基本问题,欢迎来拿分
- ADODataSet中可不可以使用Update语句。
- 简单的函数问题
- 怎么能将一个文件,(什么文件都可以的)内容放到memo内急呀。高分。在线等
- dbgrid可否增加一列,内容只是checkbox选择框,可以让用户通过它进行多向选择?
- 为什么在新版论坛里我不可以回复别人的问题?
- delphi设计 排序问题
- 动态链接库的调用问题
FreeAndNil(m);
FreeAndNil(m);如果能先判断m是不是nil就更好了
m:tmemorystream;//此时m的变量地址非nil,Pointer(m)为nil
begin
m:=tmemorystream.Create ;//Pointer(m)非nil
if m<>nil then
showmessage('zai');
m.Free ;//Pointer(m)指向的对象被释放,但Pointer(m)非nil
if m<>nil then
showmessage('free');
end;
var
m:tmemorystream;//此时m的变量地址非nil,Pointer(m)为nil
这句注释改为“此时m值为随机值,可能是nil,也可能不是nil ”更恰当一些。附:对象的名字就是一个指针procedure TForm1.Button3Click(Sender: TObject);
var
P: Pointer;
begin
P := TEdit.Create(Self);
with TEdit(P) do begin
Text := 'A Edit';
Left := 50;
Top := 50;
//....
Parent := Self;
Show;
end;
end;
反正记得 := nil 就行