当前位置:主页>销售管理软件> 列表

Free??? 怎样完全释放对象? 找服饰管理软件

进销存软件版1楼: type
TA = class
private
X,Y:integer;
public
procedure SetXY(x,y:integer);
end;

procedure SetXY(x,y:integer);
begin
self.X:=x; self.Y:=Y;
end;

procedure TForm1.Button1Click(Sender: TObject);
var TA1:TA;
tempInt:integer;
p:pointer;
intP:pinteger;
begin
TA1:=TA.Create;
TA1.SetXY(100,50);
TA1.Free;
// FreeMem(@TA1,sizeof(TA1));
p:=@TA1;
intP:=pinteger(integer(p^)+4); // TA1向后偏移 4 字节=TA.X
tempInt:=intP^;
showmessage(inttostr(tempInt)); // tempInt = 100;
//为什么 TA1 被释放了,内存还没收回来呢?
//怎样才能彻底清除对象呢?
end;

2楼: FreeAndNil一下看看 如服饰管理软件

3楼: procedure TForm1.Button1Click(Sender: TObject);
var TA1:TA;
tempInt:integer;
p:pointer;
intP:pinteger;
begin
TA1:=TA.Create;
TA1.SetXY(100,50);
TA1.Free;//这个时候TA1已经被释放了,后面你还能取到它的地址????????????
// FreeMem(@TA1,sizeof(TA1));
p:=@TA1;
intP:=pinteger(integer(p^)+4); // TA1向后偏移 4 字节=TA.X
tempInt:=intP^;
showmessage(inttostr(tempInt)); // tempInt = 100;
//为什么 TA1 被释放了,内存还没收回来呢?
//怎样才能彻底清除对象呢?
end;

4楼: to royal1442:
就是能取到地址。
to cqwty:
FreeAndNil = Free + TA1:=nil;
仅仅把它的指针清空了而已啊,并没有真正清内存。

5楼: Free标识了那块内存没有人在用,因为效率问题,并没有把那块内存清零,以后申请的内存可以占用那块内存,而且为了效率也不会初始化.
释放内存不代表要清除内存

6楼: 多人接受答案了。