Delphi Setlength 内存释放总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi Setlength 内存释放总结相关的知识,希望对你有一定的参考价值。
SetLength
功能说明:设置字符串或动态数组长度。该函数有两个参数。第一个参数为要设置的字符串变量或动态数组变量,第二个参数为指定的长度
参考实例:
var
S: String;
arrText: array of Char; // 定义一个动态数组
begin
SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。
SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char
end;
一、在Setlength 被调用次数不多时,可直接使用以下代码进行释放
- var
- aa: array of integer;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- I: Integer;
- begin
- SetLength(aa, 1000);
- for I := 0 to 999 do
- begin
- aa[I] := i;
- end;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- SetLength(aa, 0);
- end;
- //这样就OK 了
二、如果是作为临时变量,赋值给Result作为函数的返回值时,此时除释放bb外,还需释放临时变量aa。
- type
- Taa=array of Integer;
- procedure TForm1.Button3Click(Sender: TObject);
- var bb : Taa;
- begin
- bb := getaa;
- SetLength(bb,0); //执行此行,内存无变化
- end;
- function TForm1.getaa:Taa;
- var i : Integer;
- begin
- SetLength(aa,10000000); //如果采用SetLength(Result,10000000); 直接为Result赋值然后返回,则在上面Button3Click可释放内存
- for i := 0 to 10000000 - 1 do
- begin
- aa[i] := i + 1;
- end;
- Result := aa;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- SetLength(aa,0); //执行此行,内存占用才减少
- end;
三、当Setlength在for 或while 循环中使用,被频繁调用很多次时,极易抛出EoutOfMemory异常。此时建议将setlengt拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。
以上是关于Delphi Setlength 内存释放总结的主要内容,如果未能解决你的问题,请参考以下文章
关于Delphi中二维数组的声明和大小调整(对非基本类型数据,小心内存泄漏)