Uh, forget that part about the system disposing of the field memory in a
FrmReturnToForm(). I know better, and yes, I am calling
FldSetTextHandle(field, 0) on the ctlSelectEvents that close my modal form.
Still getting the leak, though.
----- Original Message -----
From: "David Beers" <[EMAIL PROTECTED]>
To: "Palm Developer Forum" <[EMAIL PROTECTED]>
Sent: Tuesday, August 26, 2003 8:46 PM
Subject: Memory leak
> I've got a routine that builds a big ol' string by looping through a bunch
> of records and then loads it to a field as seen below. Works great, but
> gives me a big ol' memory leak and I can't seem to see why. I assign a
> chunk of non-moveable memory to logP using MemPtrNew, then I use
MemPtrFree
> to free it after I've copied the string to the field handle. My POSE log
> shows that I have one memory leak with the contents being that big ol'
> string. I'm wondering if maybe it's the field that's leaking the memory
> somehow. It's in a modal form that I bring up using FrmPopupForm() and
> FrmReturnToForm(). Doesn't the system dispose of that memory, though?
>
> Here's the abridged version of my code, which hopefully captures what I'm
> doing wrong:
>
> static void LogLoadRecord(void)
> {
> Char *logP;
> ...
> field = GetObjectPtr(LogField);
> logP = (Char *)MemPtrNew(MAX_LOG_SIZE);
> ...
> // here I'm looping through a bunch of records and
> // doing StrCopy and StrCat to build the string.
> // POSE isn't logging any leaks of memory used here
> // as far as I can tell.
> ...
> error = SetFieldTextFromStr(field, logP);
> ...
> MemPtrFree((MemPtr) logP); // <-- The string pointed
> // to by logP is what is shown in the memory dump.
> }
>
> Here's the routine called for setting the field text.
> I use this all the time (but with error checking that
> I've left out for clarity):
>
> Err SetFieldTextFromStr(FieldPtr field, const Char *s)
> {
> MemHandle h;
>
> h = FldGetTextHandle(field);
> if (h) {
> FldSetTextHandle(field, NULL);
> err = MemHandleResize(h, StrLen(s) + 1);
> } else {
> h = MemHandleNew(StrLen(s) + 1);
> }
> StrCopy((Char *) MemHandleLock(h), s);
> MemHandleUnlock(h);
> FldSetTextHandle(field, h);
> return errNone;
> }
>
> TIA for any help with this!
> David
>
>
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/