Pregunta

Tengo este comportamiento extremadamente extraño:

En el siguiente código: si comento la llamada a MyLogger, todo funciona bien, eso es que obtengo el tokenizado Stempnr y se imprimen 4 tokens. Pero si descompongo la llamada a MyLogger para registrar, solo la iteración tiene lugar una vez y en otra clase de prueba con un código similar al siguiente hay un bucle que tiene lugar más de 4 veces con información redundante que se envía a Mylogger.

Entonces, revisé con la herramienta Purify para determinar si había algunos problemas de memoria en Mylogger. No pude encontrar ninguno. MyLogger está usando VAARGS para extraer Args y VFPrintf Llamar para imprimir.

No estoy seguro de cómo depurar este código más. ¡Cualquier orientación sería 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,".");
}
¿Fue útil?

Solución

strtok() mantiene algunos datos estáticos dentro, por lo que probablemente MyLogger llamadas strtok(), ya sea directa o indirectamente.

Reemplazar strtok() con strtok_r() (Versión reentrante de strtok()) para evitar este problema.

Otros consejos

¿Es el registrador llamando a Strtok?

¿Mylogger también está usando Strtok? Tenga en cuenta que Strtok no es apátrate.

Parece que Mylogger está corrompiendo la cadena en Stempstr. Intente imprimirlo nuevamente después de la llamada a MyLogger. p.ej

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

y ver si algo ha cambiado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top