REALLOC com problemas

26/12/2007

1

Gente mais um probleminha daqueles do arco-da-tia-zéfa

//PTable ptb é o pointer para a tabela
//void* pData é o pointer para o registro
//int size é o tamanho do registro em bytes

int WINAPI Inserir(PTable ptb, void* pData, int size)
{
   int i;
   pchar p=0;

   if (ptb) {

   if (size != ptb->tfh.wRecSize)
return ERRO_REC_SIZE;

   i = _msize(ptb->pRegistros) + ptb->tfh.wRecSize;

   p = (pchar) realloc( ptb->pRegistros,i);

   if (!p)
return ERRO_REC_COPY;

   ptb->pRegistros = p;

   p = p + (_msize(p) - size);

   ptb->AtualRecord = memcpy(p, pData, size);

   if (!ptb->AtualRecord)
return ERRO_REC_COPY ;

   return ERRO_OK;

 }


  return ERRO_TABLE_UNKNOWN;

}


Aparentemente o código corre bem. É uma rotina para inserção do registro na tabela

(Olha só pra explicar: To fazzendo um gerenciador de base de dados e essa rotina insere o registro na tabela que está em memória)

Bem, qdo chamo essa rotina num looping, por exemplo, ela roda bem até ao 100º ciclo, a partir daí da um erro access violation na parte do código que tem REALLOC.

Mas qdo chamo a rotina de forma individual, para insereir apenas um registro ela vai super bem.

O problema é o [b:f45aab9fa6]REALLOC[/b:f45aab9fa6], que qdo chamado muitas vezes dá o problema...

ALGUÉM PODE ME AJUDAR, HEEEEELLLLLPPPPPPPPP


Responder

Posts

27/12/2007

Massuda

Pelo código que você postou, acho que a única maneira de ocorrer isso seria ptb->pRegistros ser um ponteiro inválido não-nulo.


Responder