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
相关产品推荐
相关产品推荐

