BUG表现
第一次Insert成功,第二次开始产生异常:Argument out of range.
奇异的是Insert中用的二个Insert,一个参数Index是正常的,另一个变成N大的一个数。可能1:自己的BUG,编译通过,逻辑没什么问题,没有内存泄露,放到主线程执行同样出错,想不出哪里错了。可能2:Delphi的BUG,用到Delphi的泛型,而且又继承又包含。可能3:第三方界面控件的BUG,还没到显示出来啊。可能4:功能库的BUG,乱写内存?不太可能。

解决方案 »

  1.   


    散分庆祝撒..http://topic.csdn.net/u/20091111/17/ce59d19a-24b3-49e1-9a18-c23b3ce24771.html?88401
      

  2.   

    function XNodeList<X>.Insert(Index: Integer; Descendent: XNodeClass): X;
    begin
      BeginUpdateList;
      try
        X.CheckDescendent(Descendent);
        XmlNode.ChildNodes.Insert(Index, Descendent.CreateXmlNode(XmlNode.OwnerDocument));
        GetItemList.Insert(Index, Default(X));  //Index可能变成N大的一个数
        FItemList[Index] := Descendent.Create(Self, XmlNodeList.Nodes[Index]);
        Result := FItemList[Index];
        DoInsert(Result);
      finally
        EndUpdateList;
      end;
    end;function XNodeList<X>.GetItemList: TList<X>;
    begin
      if FItemList = nil then
      begin
        FItemList := TList<X>.Create;
        FItemList.Count := XmlNodeList.Count;
      end;
      Result := FItemList;
    end;
      

  3.   

        GetItemList.Insert(Index, Default(X));  //Index可能变成N大的一个数
        XmlNode.ChildNodes.Insert(Index, Descendent.CreateXmlNode(XmlNode.OwnerDocument));这样的效果是一样的
      

  4.   

    XmlNode.ChildNodes.Insert(Index, Descendent.CreateXmlNode(XmlNode.OwnerDocument));这部Index就变成了一个N大的数吗?GetItemList.Insert(Index, Default(X));  //Index可能变成N大的一个数
      

  5.   

    废话,我还不知道泛型是什么意思function XNodeList<X>.Insert(Index: Integer; Descendent: XNodeClass): X;
    begin
      BeginUpdateList;
      try
        X.CheckDescendent(Descendent);不对类型作约束的话,这条语句根本编不过去,谁知道你的 X 约束成什么样子了,好歹给个类型声明出来。d2010 的泛型对浮点类型的优化有 bug,不给出实例类型谁知道问题在哪问题你都不会问
      

  6.   

    //X.CheckDescendent(Descendent); 
      

  7.   

    如果是INDEX被修改可以在
    function XNodeList<X>.Insert(Index: Integer; Descendent: XNodeClass): X;
    函数定义里用const index:integer;
    让其为常量(这个在函数内是不可更改的吧),看看哪里报错吧。
      

  8.   

    GetItemList.Insert(Index, Default(X));  //Index可能变成N大的一个数
    这个不会就是调用function XNodeList <X>.Insert(Index: Integer; Descendent: XNodeClass): X;这函数吧?
    想弄传说中的递归?