delphi - TShellTreeView memory leak -
i'm using madexcept trace memory leaks. if put tshelltreeview on form , run application madexcept reports memory leak. opening , closing, nothing else. using xe6 package under xe8, since last 1 released afaik.
i know there problems former delphi versions, these fixed in xe6 package, think.
this madexcept window shown after app shutdown:
any ideas?
yes, madexcept correct expected because of exceptionally high quality. indeed defect in code use. looks this:
function createrootfolder(rootfolder: tshellfolder; oldroot : troot; var newroot: troot): tshellfolder; var p: pwidechar; newpidl: pitemidlist; numchars, flags, hr: longword; errormsg : string; begin hr := s_false; if getenumvalue(typeinfo(trootfolder), newroot) >= 0 begin hr := shgetspecialfolderlocation( 0, nfolder[getcsidltype(newroot)], newpidl); end else if length(newroot) > 0 begin if newroot[length(newroot)] = ':' newroot := newroot + '\'; numchars := length(newroot); flags := 0; p := stringtoolestr(newroot); hr := desktopshellfolder.parsedisplayname(0, nil, p, numchars, newpidl, flags); end; if hr <> s_ok begin { todo : remove next line? } // result := rootfolder; errormsg := format( serrorsettingpath, [ newroot ] ); newroot := oldroot; raise exception.create( errormsg ); end; result := createrootfrompidl(newpidl); if assigned(rootfolder) rootfolder.free; end; in both branches, responsibility of caller destroy newpidl. code not so. can discerned reading documentation:
amend final part of function so:
result := createrootfrompidl(newpidl); if assigned(rootfolder) rootfolder.free; cotaskmemfree(newpidl); i can confirm have tested change. tested original code , reproduced leak reported. changed code described above , madexcept reports no leak.
that have been unable achieve same means not executing modified code. perhaps using runtime packages , have not recompiled modified code. or perhaps there explanation. anyway, clear me failure remove leak because still running original unmodified code.

Comments
Post a Comment