Lazarus TStringList计数返回负数

Lazarus TStringList计数返回负数,lazarus,freepascal,tstringlist,Lazarus,Freepascal,Tstringlist,我想使用count属性计算TStringList中的项数(字符串)。TStringList.Count返回我“-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

我想使用count属性计算TStringList中的项数(字符串)。TStringList.Count返回我“-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;

Thx伙计。

您需要更改
list.Create
列表:=TStringList.Create当您通过对象变量而不是类类型调用构造函数时,会像调用普通方法一样调用构造函数。您实际上没有创建任何
TStringList
对象,因此调用
list.Add()
list.Count
是未定义的行为。你很幸运,你的代码没有崩溃

另外,不要忘记调用
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;

您需要更改
list.Create
列表:=TStringList.Create当您通过对象变量而不是类类型调用构造函数时,会像调用普通方法一样调用构造函数。您实际上没有创建任何
TStringList
对象,因此调用
list.Add()
list.Count
是未定义的行为。你很幸运,你的代码没有崩溃

另外,不要忘记调用
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;