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

Description of your first forum.

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

帖子siaosa » 星期二, 2002年11月5日 09:32


记录类型中的可变部分所占用的内存如何释放?谢谢
如:
  type
    myrecord=record
    pstring:PChar;
    case Integer of        //这一部分由于不是生存期自管理类型?如在程序应该如何释放?
    0:(S:String[20]);
    1:(I:Integer);
  end;
 
 
 

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

帖子siaosa » 星期二, 2002年11月5日 16:17


有哪位大侠知道?
 
 
 

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

帖子yanghai0437 » 星期二, 2002年11月5日 16:24


将这个记录对象释放,应该就释放了吧
 
 
 

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

帖子creation-zy » 星期二, 2002年11月5日 21:10


 如果你没有对记录内部信息进行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类型的分配与回收,我们也不需要显式清空。
 
 
 

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

帖子beta » 星期二, 2002年11月5日 21:32


还是 creation-zy 兄厉害,解释的清清楚楚。

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

 
 
 

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

帖子siaosa » 星期三, 2002年11月6日 07:47


谢谢creation-zy