为什么会偶尔出现list index out of bounds(0)?(100分)

  • 主题发起人 主题发起人 Caicheng
  • 开始时间 开始时间
C

Caicheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个使用listview的程序,须在开机的时候加载。
一般情况下这个程序运行正常,可是总有那么一两次,
在开机的时候,会出现list index out of bounds(0).
有时候一个星期出现一次,有时候几个星期都不出现一次。

我真是的晕倒了。为什么有时会有时不会啊!
请各位高手指教。
 
超出节点范围了
 
这是相关部分:

procedure THotkeyEditForm.LoadHotkeys;
var
Stream : TFileStream;
Reader : TReader;
Action : Integer;
sVersion : String;
sJMENO,
sDescription,
sAction,
sData : String;
begin
try
try
Stream := TFileStream.Create(ChangeFileExt(Application.ExeName, '.DAT'), fmOpenRead);
try
Reader := TReader.Create(Stream, 4096);
try
sVersion := Reader.ReadString;
Reader.ReadListBegin;
HotkeyList.Items.Clear;
while not Reader.EndOfList do
begin
sJMENO := Reader.ReadString;
sDescription := Reader.ReadString;
sAction := Reader.ReadString;
Action := Reader.ReadInteger;
case Action of
0,1,3,4:
sData := Reader.ReadString;
2 :
begin
sData := ReadHotkey(Reader);
end;
-1 :
begin
sDescription := '';
sAction := '';
sData := '';
end;
end;
Item := Hotkeylist.Items.Add;
Item.Caption:= sJMENO;
Item.SubItems.Add(sDescription);
Item.SubItems.Add(sAction);
Item.SubItems.Add(sData);
end;
Reader.ReadListEnd;
item := nil;
finally
Reader.Free;
end;
finally
Stream.Free;
end;
finally
end;
except
end;
end;
 
请存细检查一下节点的数量的限制,这种事情在一开始的时候时常会不太注意,
认真地检查源程序中有关listview的增加或删除的过程的语句。
 
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=162444
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=224736
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=159788

 
你应该在每次加载时用list.clear,这样不容易出问题
 
有啊,这段程序里面有items.clear啊。

出现这种问题的机会非常少,可是毕竟是有。
我很难模拟出问题。
 
如果是偶尔出的话,很难说,
 
都item:=nil了, 再引用不是要出问题啦.
 
如果是 item = nil 的问题的话,为什么不是每次都有会问题?
出现问题的机率很小,要是每次都有问题,这种bug也好抓一点。

运行一百次也许也只有一次。

 
奇也怪哉,我在访问ListView1.Items[0].SubItems[0]时,居然也
list index out of bounds(0)? :(
可是明明是有这项的!帮忙啦...
 
附加功能 将问题提前
 
你看是不是什么時候他沒有加入資料進去﹐變成-1了﹐也要出現這種情況。超出的
可能性不大﹐但沒加進去﹐它會變成-1﹐而你一調用肯定會出問題三。若了問題時﹐
你回憶一下到底是怎樣出問題的﹐然后進入程序內再模似剛才的操作試一下﹐再用斷
點調試﹐應該能找出來的。Delphi不會莫名其妙的出問題﹐出問題的肯定是你自己。
我有時編程序也是出現莫名其妙的問題﹐經常找了半天也找不出來﹐就懷疑是不是Delphi
的問題﹐但最終找出來還是自己某個地方出了錯。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部