Frage

Ich habe dieses äußerst seltsame Verhalten:

Im folgenden Code: Wenn ich den Anruf bei MyLogger kommentiere, dann funktioniert alles einwandfrei, ich bekomme den Stempnr -tokenized und 4 Token werden gedruckt. Aber wenn ich den Anruf bei MyLogger zur Protokollierung übernehme, findet nur die Iteration einmal statt und in anderen Testkurs mit ähnlichem Code wie unten findet ein Looping statt, der mehr als viermal stattfindet und redundante Informationen an MyLogger gesendet werden.

Ich habe also mit Purify -Tool überprüft, ob es einige Speicherprobleme in MyLogger gab. Konnte keine finden. MyLogger verwendet Vaargs, um Argumente und VFprintf -Anrufe zum Ausdruck zu extrahieren.

Ich bin mir nicht sicher, wie ich diesen Code weiter debuggen soll. Jede Anleitung würde geschätzt!.

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,".");
}
War es hilfreich?

Lösung

strtok() Hält einige statische Daten im Inneren so wahrscheinlich MyLogger Anrufe strtok(), entweder direkt oder indirekt.

Ersetzen strtok() mit strtok_r() (Wiedereintrittsversion von strtok()) um dieses Problem zu umgehen.

Andere Tipps

Ruft der Logger Strtok an?

Verwendet MyLogger auch Strtok? Beachten Sie, dass Strtok nicht staatenlos ist.

Klingt so, als würde MyLogger die Zeichenfolge in Stempstr korrumpieren. Versuchen Sie es nach dem Anruf bei MyLogger erneut auszudrucken. z.B

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

und sehen, ob sich etwas geändert hat

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top