BUG表现
第一次Insert成功,第二次开始产生异常:Argument out of range.
奇异的是Insert中用的二个Insert,一个参数Index是正常的,另一个变成N大的一个数。可能1:自己的BUG,编译通过,逻辑没什么问题,没有内存泄露,放到主线程执行同样出错,想不出哪里错了。可能2:Delphi的BUG,用到Delphi的泛型,而且又继承又包含。可能3:第三方界面控件的BUG,还没到显示出来啊。可能4:功能库的BUG,乱写内存?不太可能。
第一次Insert成功,第二次开始产生异常:Argument out of range.
奇异的是Insert中用的二个Insert,一个参数Index是正常的,另一个变成N大的一个数。可能1:自己的BUG,编译通过,逻辑没什么问题,没有内存泄露,放到主线程执行同样出错,想不出哪里错了。可能2:Delphi的BUG,用到Delphi的泛型,而且又继承又包含。可能3:第三方界面控件的BUG,还没到显示出来啊。可能4:功能库的BUG,乱写内存?不太可能。
解决方案 »
- 求复杂SQL语句一条!
- 运行存储过程时的错误?
- 如何在程序一开始就选中Treeview中的某个子节点,而非根节点
- excel退出异常问题
- 像ADOConnection的ConnectionString的属性编辑器那样的窗体怎么做?
- 高手莫笑:如何在showmessage中包含实数?
- 为什么Delphi在我的机子上运行不了,而在我朋友的机子上可以呢?
- 讨论:为什么很多人宁可死抱VB,或学VC。就是不愿意学Delphi?
- 聘delphi高級程序員及SQL數據庫管理員(DBA)!
- [年末礼包]称重仪表数据解析控件代码(涵盖多数地磅仪表协议)
- 我要idhttp post 登录这个网址
- Delphi 服务自动退出
散分庆祝撒..http://topic.csdn.net/u/20091111/17/ce59d19a-24b3-49e1-9a18-c23b3ce24771.html?88401
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;
XmlNode.ChildNodes.Insert(Index, Descendent.CreateXmlNode(XmlNode.OwnerDocument));这样的效果是一样的
begin
BeginUpdateList;
try
X.CheckDescendent(Descendent);不对类型作约束的话,这条语句根本编不过去,谁知道你的 X 约束成什么样子了,好歹给个类型声明出来。d2010 的泛型对浮点类型的优化有 bug,不给出实例类型谁知道问题在哪问题你都不会问
function XNodeList<X>.Insert(Index: Integer; Descendent: XNodeClass): X;
函数定义里用const index:integer;
让其为常量(这个在函数内是不可更改的吧),看看哪里报错吧。
这个不会就是调用function XNodeList <X>.Insert(Index: Integer; Descendent: XNodeClass): X;这函数吧?
想弄传说中的递归?