Type
//树结构
//------------------------------------------------
PUserInfo= ^TUserInfo;
TUserInfo= record
name:String;
fChild:TList;//子结点
end;
//------------------------------------------------var
fUser:TList;procedure TFomr1.ShowTree(fList: TList);
var
i: Integer;
node: PUserInfo;
begin
if fList <> nil then
begin
node := New(PUserInfo);
for i := 0 to fList.Count - 1 do
begin
node := PUserInfo(fList.Items[i]);
ShowTree(node^.fChild);
end;
end;
end;procedure TFomr1.UserClick(Sender: TObject);
begin
ShowTree(fUser);
end;谁能告诉我代码错在哪里?当我遍历到叶结点再第一次递归往上级结点返回时提示资源访问出错!
//树结构
//------------------------------------------------
PUserInfo= ^TUserInfo;
TUserInfo= record
name:String;
fChild:TList;//子结点
end;
//------------------------------------------------var
fUser:TList;procedure TFomr1.ShowTree(fList: TList);
var
i: Integer;
node: PUserInfo;
begin
if fList <> nil then
begin
node := New(PUserInfo);
for i := 0 to fList.Count - 1 do
begin
node := PUserInfo(fList.Items[i]);
ShowTree(node^.fChild);
end;
end;
end;procedure TFomr1.UserClick(Sender: TObject);
begin
ShowTree(fUser);
end;谁能告诉我代码错在哪里?当我遍历到叶结点再第一次递归往上级结点返回时提示资源访问出错!
解决方案 »
- dephi 和vb、c有什么不同,学那个好?
- 如何解决treeview中结点的移动问题.
- fastreport 3.15 是否可以同时御览两个不同的报表?谢谢
- 诚聘 Delphi 开发
- 如何在delphi中调用telnet,有现成的控件吗?
- 这样利用多线程调用数据库是否可以?
- 如何在asp中调用MTS中的DCOM服务器!!(急,最近要开发一个B/S系统,请大虾详解!)
- 救命啊!!!!!!!关注也有分地!
- 在DELPHI5中利用ADO打开SQL SERVER 数据库中某一个TABLE出现"interface not supported' 错误信息, 是何原因?
- 如何使TPanel显示滚动条?
- 怎么通过按钮触发存储过程,把结果显示在DBGRID中??
- dataset 如何 得到 "增加\删除\修改" 的记录内容
node := New(PUserInfo); 这句不要,有内存泄露
TUserInfo创建时要将fChild设置为nil,否则 fList <> nil 判断成立,临时变量是不会初始化的
var
i: Integer;
node: PUserInfo;
begin
if fList < > nil then
begin
node := New(PUserInfo);
//这里出错。每次递归进来i=0(即始终在递归fList.Items[0]的子结点)
for i := 0 to fList.Count - 1 do
begin
node := PUserInfo(fList.Items[i]);
ShowTree(node^.fChild);
end;
end;
end;
试一下下面的语句。
for i := 0 to fList.Count - 1 do
begin
if assinged(fList.Items[i]) then
begin
node := PUserInfo(fList.Items[i]);
ShowTree(node^.fChild);
end;
end;
procedure TFomr1.ShowTree(fList: TList);
var
i: Integer;
node: PUserInfo;
begin
if fList < > nil then
begin
//node := New(PUserInfo);
for i := 0 to fList.Count - 1 do
begin
node := PUserInfo(fList.Items[i])^.fChild;
if node<> nil then
ShowTree(node);
end;
end;
end;