You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TStringList.Count返回负数问题求助(附Lazarus代码)

为什么TStringList.Count返回奇怪的负数?

哥们,问题出在你创建TStringList的方式上!你写的list.Create;完全不对——在Lazarus/Delphi里,类类型的变量是引用类型,你得先调用构造函数并把返回的实例赋值给变量才行。

你现在的代码里,list是一个未初始化的指针,指向内存里的随机位置,直接调用它的Create方法根本没有完成对象的初始化。这时候访问list.Count,读的就是那块随机内存里的垃圾数据,所以才会得到-307586000这种莫名其妙的数值。

正确的初始化方式应该是list := TStringList.Create;,另外最好加上try...finally块来确保对象被正确释放,避免内存泄漏。修正后的代码如下:

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
      if vrai then
      begin
        list.Add(IntToStr(i));
        ShowMessage(IntToStr(list.Count));
      end;
  finally
    list.Free; 
  end;
end;

这样修改后,list就被正确初始化了,Count属性也会正常返回当前列表里的条目数量,每次Add之后你都会看到Count从1递增到5。

内容的提问来源于stack exchange,提问作者EdRIn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:38:17