procedure TForm1.FormCreate(Sender: TObject);
var
A: array of Integer;
begin
SetLength(A, 3);
ShowMessage(IntToStr(A[0]));
end;
不定项选择题:
A. 此段代码会造成内存泄漏;
B. 在SetLength之后,A[0]、A[1]和A[2]总是0;
C. ShowMessage之后应当使用SetLength(A, 0)来释放内存;
D. 在SetLength之后,A[0]、A[1]和A[2]都是不确定的值。
var
A: array of Integer;
begin
SetLength(A, 3);
ShowMessage(IntToStr(A[0]));
end;
不定项选择题:
A. 此段代码会造成内存泄漏;
B. 在SetLength之后,A[0]、A[1]和A[2]总是0;
C. ShowMessage之后应当使用SetLength(A, 0)来释放内存;
D. 在SetLength之后,A[0]、A[1]和A[2]都是不确定的值。
begin
Byte(s^[0]) := newLength; // should also fill new space
end;
出自System.pas 3589行
B. 在SetLength之后,A[0]、A[1]和A[2]总是0;
C. ShowMessage之后应当使用SetLength(A, 0)来释放内存;
D. 在SetLength之后,A[0]、A[1]和A[2]都是不确定的值。首先对于A, C答案, 动态数组和字符串都是Managed的类型, 之前在你的关于局部变量那个帖子里我写过, 所以, 这里由SetLength申请的资源都会经过delphi隐式的加入的try Finally自动清除.对于B, D 答案, delphi的源码System里已经有答案了, 无需再细细的解释了
看几个函数 system.pas_SetLength
_LStrSetLength
_UStrSetLength
_WStrSetLength
_DynArraySetLength
DynArraySetLength
B. undefined
C. 根据自己的需要,赋值nil或setlength(0)都可。这样做是好的编程习惯。
D. undefined
选B。
原因:
SetLength -> _DynArraySetLength -> DynArraySetLength -> FillChar。补充说明:
procedure TForm1.FormCreate(Sender: TObject);
var
a: array of Integer;
begin
SetLength(a, 3);
a[0] := 1;
a[1] := 2;
a[2] := 3;
SetLength(a, 5);
ShowMessage(IntToStr(a[4]));//a[0], a[1]和a[2]依然分别是1,2和3,a[4]和a[5]都是0
SetLength(a, 2);
ShowMessage(IntToStr(a[0]));//a[0]和a[1]依然分别是1和2
end;