Pergunta

Eu tenho esse comportamento extremamente estranho chegando:

No código abaixo: se eu comentar a chamada para o MyLogger, tudo funcionará bem, eu obtive o tokenizado do STEMPNR e 4 tokens são impressos. Mas se eu descomentar a chamada para o MyLogger para registrar, apenas a iteração ocorre de uma vez e em outra aula de teste com código semelhante, como abaixo, há um loop que ocorre mais de 4 vezes com informações redundantes sendo enviadas ao MyLogger.

Então, verifiquei com a ferramenta Purify para determinar se havia alguns problemas de memória no MyLogger. Não conseguiu encontrar nenhum. O MyLogger está usando VAARGs para extrair chamadas de args e vfprintf para imprimir.

Não tenho certeza de como depurar ainda mais esse código. Qualquer orientação seria apreciada!.

char sTempNr[41] = "1129Z13589.2.9.10";
char *sTempStr;
sTempStr = NULL;

sTempStr = strtok(sTempNr,".");
while (sTempStr)
{
     printf("in in TempStr[%s]\n",sTempStr);
      //MyLogger("write","","Temp String[%s]",sTempStr);

     sTempStr = strtok(NULL,".");
}
Foi útil?

Solução

strtok() mantém alguns dados estáticos dentro de MyLogger chamadas strtok(), direta ou indiretamente.

Substituir strtok() com strtok_r() (versão reentrante de strtok()) para contornar esse problema.

Outras dicas

O logger está chamando Strtok?

O MyLogger também está usando o STRTOK? Observe que Strtok não está apátrida.

Parece que o MyLogger está corrompendo a string no STEMPSTR. Tente imprimi -lo novamente após a chamada para o MyLogger. por exemplo

 printf("in in TempStr[%s]\n",sTempStr);
 MyLogger("write","","Temp String[%s]",sTempStr);
 printf("in in TempStr[%s]\n",sTempStr);

e veja se alguma coisa mudou

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top