Steve, You are allocating 8 byte for every string, but using only 2. May be this is why your code is crashing?
-- Best regards, Boris Steve, Friday, August 8, 2003, 12:42:28 AM, you wrote: SK> Boris, SK> Although I do not have a solution for you, I too am attempting the same type SK> of list manipulation. SK> I have taken your code as an example, however am running into problems. SK> My code is similar to yours, however, I am not reading the info from a DB SK> instead it is hard coded. You said that you were loading the list fine, SK> just having cleanup problems, I'm receiving a fatal error trying to load the SK> list... What am I doing wrong? SK> static void PopulateList() SK> { SK> char** lstArray = (char**) MemHandleNew(2 * sizeof(char*)); SK> FormType* frmP = FrmGetActiveForm(); SK> ListType* lstP = (ListType*) FrmGetObjectPtr(frmP, lstDesc); SK> lstArray[0] = (char*)MemPtrNew(8); SK> StrCopy(lstArray[0], "a"); SK> lstArray[1] = (char*)MemPtrNew(8); SK> StrCopy(lstArray[1], "b"); SK> LstSetListChoices(lstP, lstArray, 2); SK> LstDrawList(lstP); SK> for (int i = 0; i < 2; i++) { SK> MemPtrFree(lstArray[i]); SK> } SK> MemPtrFree(lstArray); SK> } SK> "Boris Epshteyn" <[EMAIL PROTECTED]> wrote in message SK> news:[EMAIL PROTECTED] >> >> Hi, >> >> I have an interesting problem. I am allocating an array of strings. >> This array is filled from the database and then used for populating >> pop-up list. When program is ran, list pops up fine, item gets >> selected, but when I tap on the trigger again I get: >> "just read from the ... which is the reserved field of the >> frmControlObj," bla-bla-bla. >> >> If my clean-up portion of the code is commented out, everything runs >> fine, but creates memory leaks. Clean-up portion is: >> for (i = numRec - 1; i >= 0; i--) >> { >> MemPtrFree(programsArray[i]); >> } >> MemPtrFree(programsArray); >> >> I would appreciate any ideas why it is happening. The code is bellow: >> >> >> static Boolean frmNewM_trProg_OnSelect(EventPtr event) >> { >> ListType *list = GetObjectPtr(lstPrograms); >> Int16 listItem, cardNo; >> UInt32 numRec = 0; >> Err err; >> char** programsArray; >> MemHandle record; >> LocalID progLocID; >> Program* prog; >> int i; >> MemPtr ptr; >> err = DmOpenDatabaseInfo(progDB, &progLocID, NULL, NULL,&cardNo, SK> NULL); >> if (progLocID != 0) >> { >> err = DmDatabaseSize(cardNo, progLocID, &numRec, NULL, NULL); >> } >> programsArray = (char**)MemPtrNew(numRec * sizeof(char*)); >> >> for (i = 0; i < numRec; i++) >> { >> record = DmQueryRecord(progDB, (UInt16)i); >> if (record) >> { >> prog = (Program*)MemHandleLock(record); >> ptr = &prog->programName; >> programsArray[i] = (char*)MemPtrNew(StrLen(ptr) + 1 ); >> StrCopy(programsArray[i], ptr); >> MemHandleUnlock(record); >> } >> } >> LstSetListChoices(list, programsArray, numRec); >> listItem = LstPopupList(list); >> >> if(listItem != -1) >> { >> ControlType *trg = GetObjectPtr(trProg); >> CtlSetLabel(trg, programsArray[listItem]); >> } >> for (i = numRec - 1; i >= 0; i--) >> { >> MemPtrFree(programsArray[i]); >> } >> MemPtrFree(programsArray); >> return true; >> } >> >> >> >> >> -- >> Best regards, >> Boris mailto:[EMAIL PROTECTED] >> >> >> mailto:[EMAIL PROTECTED] -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/