请教:记录类型中的可变部分所占用的内存如何释放? (50分)

  • 主题发起人 主题发起人 siaosa
  • 开始时间 开始时间
S

siaosa

Unregistered / Unconfirmed
GUEST, unregistred user!
记录类型中的可变部分所占用的内存如何释放?谢谢
如:
type
myrecord=record
pstring:PChar;
case Integer of //这一部分由于不是生存期自管理类型?如在程序应该如何释放?
0:(S:String[20]);
1:(I:Integer);
end;
 
有哪位大侠知道?
 
将这个记录对象释放,应该就释放了吧
 
如果你没有对记录内部信息进行New、SetLength、GetMem等操作,就不需要释放——也不
可能被“释放”。
你上面的例子可以用: Caption:=IntToStr(SizeOf(myrecord))
来检查一个记录实际上
要占用多少空间——28——显然已经将String[20]包含在内了。
值得注意的是 pstring:PChar
——它是指针。
var
A:myrecord;
begin
New(A.pstring)
//给指针分配空间
A.pstring^:='A'
//赋值
end
//未释放 New 过程分配的空间,虽然编译器能够自动回收记录 A,但是不能回收 A.pstring

如果我们改变定义方式:
type
MyRec=record
Str:String
//不定长字符串
Index:Integer;
end;
var
A:MyRec;
begin
A.Str:='A cat';
Caption:=A.Str;
end;
编译器会自动进行String类型的分配与回收,我们也不需要显式清空。
 
还是 creation-zy 兄厉害,解释的清清楚楚。

我插一句: SizeOf(MyRec) 返回多少,就自动分配多少,也自动回收多少:)

 
谢谢creation-zy
 
后退
顶部