请教delphi的内存管理!

特兰 2010-01-22 03:30:29
如下,我定义了一个record类型,再在其上定义一个数组类型
TParamValue = Record
ParamName:String; //The Name of Variant
ParamValue:String; //The Value of Variant
end;
TParamValues = Array of TParamValue;
我有一个function返回一个TParamValues类型数组。
function GetValueList():TParamValues;
var
ValueList: TParamValues;
begin
SetLength(ValueList,n);
......
Result:=ValueList;
end;
经过测试每次调用function都返回一个新的ValueList
procedure UseValueList();
var
ValueList: TParamValues;
begin
ValueList:=GetValueList();
......
end;
请问这个ValueList在使用完毕后Delphi回自动回收内存吗?
...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
特兰 2010-01-25
  • 打赏
  • 举报
回复
谢谢各位的热心帮助!
麦客来了 2010-01-24
  • 打赏
  • 举报
回复
说错了,刚测试了,没有内存泄漏。
麦客来了 2010-01-24
  • 打赏
  • 举报
回复
1. 用FastMM测试一下就知道有内存泄漏了
2. 动态数据不是自动释放的,需要手动释放 SetLength(arr, 0)。
wliaoc 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sqldebug_fan 的回复:]
并没有存在内存泄露,每次返回一个新的,是由于你的这句代码SetLength(ValueList,n);这句代码会重新分配内存,另外动态数组的内存管理是DELPHI帮你自动完成的。
[/Quote]

同意
SQLDebug_Fan 2010-01-22
  • 打赏
  • 举报
回复
并没有存在内存泄露,每次返回一个新的,是由于你的这句代码SetLength(ValueList,n);这句代码会重新分配内存,另外动态数组的内存管理是DELPHI帮你自动完成的。
麦客来了 2010-01-22
  • 打赏
  • 举报
回复
不会自动回收,存在内存泄漏。
金卯刀 2010-01-22
  • 打赏
  • 举报
回复
動態數組也是采用 string 引用計數的管理方式維護生存周期
kfcoffe 2010-01-22
  • 打赏
  • 举报
回复
会回收吧,虽然你上面用到setLength分配内存,但由于动态数组是生存期自管理类型。
imho888 2010-01-22
  • 打赏
  • 举报
回复
但是在
procedure UseValueList();
var
ValueList: TParamValues;
begin
ValueList:=GetValueList();
......
end;

这里面ValueList能正常运行吗?
imho888 2010-01-22
  • 打赏
  • 举报
回复
这只只是个数组,应该释放

16,748

社区成员

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

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