>  I want to load two arrays with the information of a database, but I have
>  problems related with memory (the emulator and a palm device crashes with
>  this sentences). This is the code, any idea???
>  ...
>
>  typedef struct {
>   Int16  conProvincia;
>   Char nomProvincia[15];
>  } TRecProvincia;
>
>  ...
>  err = openDatabase(name,&gDProvin,kCardNumber,kCreator,kType);
>    MAXPROV=DmNumRecords(gDProvin);
>  ...
>
>  Int16           *lista_conprovincia;
>  stringtype      *lista_nomprovincia;
>  TRecProvincia   *p;

>  lista_conprovincia  = (Int16*) MemPtrNew(MAXACT  * sizeof(Int16));
>  lista_nomprovincia  = (Char**) MemPtrNew(MAXACT  * sizeof(Char*));

Shouldn't "MAXACT" be replaced with "MAXPROV"?  Depending on your value of
MAXACT, you could be overflowing you buffer below.  This could be the cause
of your crash.



> for (i=0; i<MAXPROV;i++)
> {
>    h = DmQueryRecord(gDProvin,i);
>    p = (TRecProvincia *)MemHandleLock(h);
>    lista_conprovincia[i] = (Int16) MemPtrNew(sizeof(Int16));
>    lista_nomprovincia[i] = (Char *) MemPtrNew(15);
>    lista_conprovincia[i] =  p->conProvincia;
>    StrCopy(lista_nomprovincia[i], p->nomProvincia);
>    MemPtrUnlock(p);
> }

By the way, you are going to have a memory leak here.  You don't need the
line:

> lista_conprovincia[i] = (Int16) MemPtrNew(sizeof(Int16));

You are allocating memory, then assigning another value over the top of the
memory address.


Hope that helps,


Craig



-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to