TStringList count returns 负数
TStringList count returns negative number
我想使用计数 属性 来计算 TStringList 中项目(字符串)的数量。 TStringList.Count returns 我“-307586000”为什么?
这是我在 Lazarus 中的代码:
procedure Test;
var
list: TStringList;
vrai: boolean;
nCol, i: integer;
begin
vrai := true;
list.Create;
nCol := 5;
for i := 0 to nCol-1 do
if vrai then
begin
list.Add(intToStr(i));
showmessage(IntToStr(list.Count));
end;
end;
谢谢大家。
您需要将 list.Create;
更改为 list := TStringList.Create;
当您通过对象变量而不是 class 类型调用构造函数时,构造函数将像普通方法一样被调用。您实际上并没有创建任何 TStringList
对象,因此调用 list.Add()
和 list.Count
是未定义的行为。你很幸运你的代码没有简单地崩溃。
此外,当您使用完 list
时,不要忘记调用 list.Free;
。
试试这个:
procedure Test;
var
list: TStringList;
vrai: boolean;
nCol, i: integer;
begin
vrai := true;
list := TStringList.Create;
try
nCol := 5;
for i := 0 to nCol-1 do
begin
if vrai then
begin
list.Add(IntToStr(i));
ShowMessage(IntToStr(list.Count));
end;
end;
finally
list.Free;
end;
end;
我想使用计数 属性 来计算 TStringList 中项目(字符串)的数量。 TStringList.Count returns 我“-307586000”为什么?
这是我在 Lazarus 中的代码:
procedure Test;
var
list: TStringList;
vrai: boolean;
nCol, i: integer;
begin
vrai := true;
list.Create;
nCol := 5;
for i := 0 to nCol-1 do
if vrai then
begin
list.Add(intToStr(i));
showmessage(IntToStr(list.Count));
end;
end;
谢谢大家。
您需要将 list.Create;
更改为 list := TStringList.Create;
当您通过对象变量而不是 class 类型调用构造函数时,构造函数将像普通方法一样被调用。您实际上并没有创建任何 TStringList
对象,因此调用 list.Add()
和 list.Count
是未定义的行为。你很幸运你的代码没有简单地崩溃。
此外,当您使用完 list
时,不要忘记调用 list.Free;
。
试试这个:
procedure Test;
var
list: TStringList;
vrai: boolean;
nCol, i: integer;
begin
vrai := true;
list := TStringList.Create;
try
nCol := 5;
for i := 0 to nCol-1 do
begin
if vrai then
begin
list.Add(IntToStr(i));
ShowMessage(IntToStr(list.Count));
end;
end;
finally
list.Free;
end;
end;