Domanda

Ho questo strano comportamento estremamente venuta:

Nel codice qui sotto: Se io commento la chiamata a myLogger poi tutto funziona bene che è ho la sTempNr tokenized e 4 gettoni vengono stampati. Ma se Scommentare la chiamata a myLogger per accedere allora solo l'iterazione avviene una volta e in altre classi test con codice simile come sotto v'è un loop avvenendo più di 4 volte con informazioni ridondanti inviati a myLogger.

Così, ho controllato con strumento Purify per determinare se ci sono stati alcuni problemi di memoria in myLogger. Impossibile trovare alcuna. MyLogger sta usando vaargs per estrarre args e vfprintf chiamare per la stampa.

Non sono sicuro di come eseguire il debug ulteriormente questo codice. Tutto il consiglio sarebbe apprezzato!.

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,".");
}
È stato utile?

Soluzione

strtok() conserva alcuni dati statici all'interno chiamate quindi probabilmente MyLogger strtok(), direttamente o indirettamente.

Sostituire strtok() con strtok_r() (versione da rientro di strtok()) per aggirare questo problema.

Altri suggerimenti

E 'il logger chiamando strtok?

È myLogger utilizza strtok come bene? Si noti che strtok non è senza stato.

Suona come myLogger sta corrompendo la stringa in sTempStr. Provare a stampare di nuovo fuori dopo la chiamata a myLogger. ad esempio

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

e vedere se qualcosa è cambiato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top