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;
二、如果是作为临时变量,赋值给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);
- 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拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。
|
请发表评论