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:

madexcept screenshot

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

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -