delphi2007写的程序内存泄漏,高手帮忙--在线等奥(100)

  • 主题发起人 主题发起人 xiaoyue_a
  • 开始时间 开始时间
X

xiaoyue_a

Unregistered / Unconfirmed
GUEST, unregistred user!
我弄的程序中主要使用了listview tstringlist。发现内存不断飙升!其中tstringlist使用的很多(循环中使用),但都使用了.free。找了1天多,没发现哪里的问题,请高手支招!推荐个内存检测工具也好!!!
 
内存检测工具:MemProof、http://down2.codepub.com/code333/2007/2/8/MEMP0930.rarCheckMem、http://dx.delphi86.com/down/delphigj/qt/CheckMem%20内存泄漏检测.exeSleuth QA、ftp://ftp.51delphi.com/tpsqa3.rar
 
BoundsCheckerhttp://downloads.2ccc.com/tools/developer/Numega.BoundsChecker.v6.5.Delphi.Edition.rar
 
de410仁兄,BoundsChecker打开我的exe后,点运行报错,不给检查!
 
如果tstringlist中存放了非简单类型,比如是某个class类型,你只free掉tstringlist是不行的,在fee掉sttringlist之前你要先释放掉那些对像,类似于下面的ClearDeptListprocedure TfrmUser.CreateDeptList; procedure AddXmlNodeTofcTree(tn: TTreeNode; xn: IXMLNode); var OrgNO: PNode_XML; ChildNode: IXMLNode; CurrentTN: TTreeNode; begin New(OrgNO); OrgNO^.Name := xn.Attributes['name']; OrgNO^.NO := xn.Attributes['orgno']; OrgNO^.NodeType := 1; CurrentTN := tvDept.Items.AddChildObject(tn, OrgNO^.Name, OrgNO); ChildNode := xn.ChildNodes.First; while (ChildNode <> nil) do begin AddXmlNodeTofcTree(CurrentTN, ChildNode); ChildNode := ChildNode.NextSibling; end; end;var st: TStringStream; str: String; Root, ChildNode: IXMLNode; i: Integer;begin for i := 0 to tvDept.Items.Count - 1 do Dispose(Pointer(tvDept.Items.Data)); tvDept.Items.Clear; {$IFDEF XMLDEBUG} str := GetStrFromXML('Dept.xml'); {$ELSE} str := IdHttpUser.Get(findAllOrg); {$ENDIF} XDUser.XML.Clear; st := TStringStream.Create(str); try XDUser.LoadFromStream(st, xetUTF_8); Root := XDUser.DocumentElement; if Root = nil then Exit; ChildNode := Root.ChildNodes.First; while (ChildNode <> nil) do begin AddXmlNodeTofcTree(nil, ChildNode); ChildNode := ChildNode.NextSibling; end; finally st.Free; end;end;procedure TfrmUser.ClearDeptList;var i: Integer;begin for i := 0 to tvDept.Items.Count - 1 do Dispose(tvDept.Items.Data); tvDept.Items.Clear;end;
 
我tstringlist中就放的string 没放别的类型啊 真是郁闷
 
把代码贴出来看看
 
多谢各位仁兄,原因找到了,是CreateProcess没close。费了我好多时间啊 555
 
后退
顶部