strtok_r: Conditional jump or move depends on uninitialised value
Bonjour,
j'utilise strtok_r pour parser un message (char *msg) obtenu en sortie d'une couche de récupération de paquets venant de ma carte réseau. (msg ici correspond en fait à la couche 7 dans OSI). Quand j'utilise valgrind pour vérifier les erreurs mémoires, j'obtiens un message d'erreur: Conditional jump or move depends on uninitialised value
at 0x5977762: strtok_r (strtok.S:117) . Valgrind trouve apparemment un pointeur (?) non initialisé entré en paramètre de strtok_r ... Voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10
|
char *header_fields;
char delims[2] = { 0x0D, 0x0A }
char *next_token;
header_fields = strtok_r((char *) msg, delims, &next_token);
while (header_fields) {
...
header_fields = strtok_r(NULL, delims, &next_token);
} |
et pourtant le code de l'exemple du man strtok_r ne produit ce genre d'erreur en le lançant avec valgrind:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4) {
fprintf(stderr, "Usage: %s string delim subdelim\n",
argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
token = strtok_r(str1, argv[2], &saveptr1);
if (token == NULL)
break;
printf("%d: %s\n", j, token);
for (str2 = token; ; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL)
break;
printf(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
} /* main */ |
Je tiens préciser que mon code parse bien le message msg mais c'est valgrind qui rale.
Je me demande quand même d'ou vient le problème ... pourquoi valgrind rale.
Est ce que quelqu'un aurait une idée ...
Merci d'avance