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

Receive udp packets in android gstreamer -

php - Extract Text from HTTP referer -

matplotlib - PYTHON: Annotate boxes disapear dependant on range -