I found the leaks and they were in SwordReader's search code. There was
a call to VerseKey::clone which returns a pointer to a SWKey, which was
then being implicitly cast back into a VerseKey object, and the
anonymous object was lost in the transaction. This also cleared the
stdstr leak as well which I assume had to do with the lost SWKey.
Also I have implemented a better progress bar in SwordReader's search,
it actually updates by passing SWModule::search's call back argument. It
now updates regularly.
--
In Christ,
David Trotz
David Trotz wrote:
I have spent the weekend restructuring some of the SwordReader code.
I removed the UString stuff and implemented a more elegant replacement
called WCString. WCString can convert (typically implicitly) from
const char*, const wchar_t *, and std::string. This will make string
manipulations between the sword api and the wince api much easier to
deal with as well as read.
I ran "Code Snitch" (a memory and resource leak detection software)
against the current source code and eliminated all known memory and
resource leaks in the gui. I did spot a couple of minor memory leaks
in the sword api. I cannot verify for sure that they are in fact
memory leaks but I can say thus far when code snitch detects a memory
leak it has yet to be wrong, even when I was sure it was wrong. I will
try to take a stab at fixing these later this week but if anyone
recognizes these and has an "oh yeah, I forgot about that..." moment
feel free to take these on. Of course these might be memory leaks in
the context of my gui source code, but I will point them out anyway.
<utilstr.cpp>
char *stdstr(char **ipstr, const char *istr, unsigned int memPadFactor) {
if (istr) {
if (*ipstr)
delete [] *ipstr;
int len = strlen(istr) + 1;
// the following line has been tagged as a memory leak
*ipstr = new char [ len * memPadFactor ];
memcpy(*ipstr, istr, len);
}
return *ipstr;
}
</utilstr.cpp>
<versekey.cpp>
SWKey *VerseKey::clone() const
{
// the following line has been tagged as a memory leak
// probably someone forgot clone creates a new object
// on the heap
return new VerseKey(*this);
}
</versekey.cpp>
After spending the time I have in the SwordReader internals, I am
making plans to restructure more of the source code to make it a bit
more intuitive and approachable. Once this is done I will introduce my
new html renderer.
Thanks everyone for your prayers and encouragement. They have paid off.
In Christ,
David Trotz
------------------------------------------------------------------------
_______________________________________________
sword-devel mailing list: [email protected]
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
_______________________________________________
sword-devel mailing list: [email protected]
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page