请教,动态数组用完后需要手动释放吗?

lonelysoul2000 2006-01-04 10:49:12
rt
...全文
771 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2006-01-06
  • 打赏
  • 举报
回复
动太数组的分配也是在堆上完成的,不过不需要手工释放,是因为过程结束时,系统会自动加上
DynArrayClear来清除分配的空间,不管是否分配了空间。
只要定义了DynArray(ArrayVar : array of xxx);然后产生了这个变量的引用,系统就会自动加上,
因此放到过程结束地方的SetLength(ArrarVar,0);意思不大。
lonelysoul2000 2006-01-06
  • 打赏
  • 举报
回复
谢谢~结贴了
蓝色光芒 2006-01-06
  • 打赏
  • 举报
回复
要,这个相当于调用GetMem
lonelysoul2000 2006-01-06
  • 打赏
  • 举报
回复
谢谢各位的回答,
再请教一下,用new(Pointer)语句后,要不要手动释放Pointer内存呢?
var
P:PString;
begin
New(P);
P^:=IntToStr(i);
...
zhanghao16 2006-01-05
  • 打赏
  • 举报
回复
说到资源释放问题,也想谈谈自己的看法,希望楼主不要怪我抢地盘 :)
都说程序中,每个对象或类型变量都有自己的生命周期和作用域,
当它们超出自己的作用域时,也就意味着生命周期结束了。。。。
以前常听人讲,当生命周期结束时,系统应该是自动回收内存间的。
那么,问题来了,在一个过程或函数开始时生成一个局部对象,为什么很多程序员一定要
在过程结束时把它释放掉。。。如果不主动将它释放的话,真的会占用内存吗?过程或函数
结束时,局部对象不会自动被系统回收吗?
最后,到底在什么情况下,才必须要手动释放内存呢?希望楼主和各位前辈谈谈在资源释放问题上的心得?
xuancaoer 2006-01-05
  • 打赏
  • 举报
回复
mark
ywx2008 2006-01-05
  • 打赏
  • 举报
回复
学习了
ZyxIp 2006-01-05
  • 打赏
  • 举报
回复
作用域的问题根本上来说还是要看 数据是保存在什么地方的。如果是保存在堆上,则要自己手动释放,如果是保存到栈上则是系统会帮你释放的。

对于Delphi 来说所有的对象创建都是在堆上分配内存的所以要自己来释放。

procedure testPro;
var
MyEdit:TEdit;
AInt:Integer;
AStr:String;
AIntArr:Array of integer;
ACharArr :Array [0..9] of Char;
begin
MyEdit:=TEdit.create(Nil);
AInt:=3;
AStr:='abcd';
SetLength(AIntArr,10);
ACharArr[0]:='a';
end;

Myedit 是要自己手动释放的,其它则不用。如果用了GetMemory 也是要自己释放的。
云帆 2006-01-04
  • 打赏
  • 举报
回复
上面的说的很清楚了
forestry98 2006-01-04
  • 打赏
  • 举报
回复
如果数组里面没有手动Create的类的话,是不需要手动释放的.
但是如果你的数组里有大量的数据,用完后也可以用SetLength(arrayVar,0)释放一下的.
老之 2006-01-04
  • 打赏
  • 举报
回复
一般不用手动释放,它会自己处理。
如果要手工释放可以赋值为nil。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧