var aList:TList;
  i:integer;
...
for i:=0 to aList.count-1 do begin
  ...
  if 条件 then
     aList.delete(i);//在这里做删除会不会有问题???
end;如上面注释所说的,能不能那样做删除,会不会导致内存出错有更好的办法吗?

解决方案 »

  1.   

    使用
    for I := aList.Count downto 0 do begin
      if xxx then
        aList.delete(i-1);//
    end;
      

  2.   

    for i:=AList.Count-1 downto 0 do
    begin
      if 条件 then
      begin
        //先释放指针指向的内存控件
        ……
        //然后删除指针
        AList.Delete(i);
      end;
    end;
      

  3.   

    可以删除List中的元素,但循环应该反过来写,否则会出现索引溢出的错误。
    for i := List.Count - 1 downto 0 do 
      List.Delete(i);或是
    While List.Count > 0 do 
      List.Delete(0);