SetLength申请的内存如何释放? ( 积分: 50 )

  • 主题发起人 主题发起人 EdwardZhou
  • 开始时间 开始时间
E

EdwardZhou

Unregistered / Unconfirmed
GUEST, unregistred user!
var x:array of char;
begin
SetLength(x,1024);
...
x :=nil;//释放
end;
 
可以使用GetMem和FreeMem
注意FreeMem只能释放GetMem申请的内存

数组Application会自己管理内存
我都是SetLength(x,0)来处理

X只是一个指针,x:=nil;只是给指针赋值,但是并不能释放它原来指向的内存
 
x :=nil;
动态数组是自管理的,即便不写x :=nil,也会自动被释放的,不需要考虑
 
动态数组已经自己管理。
 
SetLength(x,0)是比较好的答案.也是我的选择
 
finalize(x)
 
SetLength过程可以改变一个字符串或动态数组的大小.delphi已一个nil指针表示一个空的动态数组。delphi利用引用计数来维护一个动态的数组,若为0则释放内存空间。但是Delphi中呢对字符的类型有多种,处理的方式各不相同,你得查一下相关得资料来进一步得了解Delphi对字符是如何管理得。ansistring类型是不需要释放空间的.
 
SetLength(a, 10);
...
a := Nil;
 

setLength(a,0);
 
用nil和SetLength(x,0)都可以.
我用的是nil.
但是,听高手说Delphi是自动释放内存的,不知道是不是真的?
 
过程变量,就不用管它
 
SetLength(x,0)可以在窗体Free之前使内存占用减少,
当窗体Free时,不管你有没有维护array类型的内存,
程序都会自动释放掉array占用的内存,
就象定义了一个string,我们不会去管它释放不释放的。
 
如果动态数组的成员是对象,那么需要Create,也就需要手工Free吧?
 
后退
顶部