Bonjour,
Je travaille sur Ubuntu 10.04 LTS x86_64.
J'essaie de parser un message texte que je lis depuis un fichier et que je charge en mémoire.
Quand j'execute le code j'ai un seg fault (sur les strncmp se trouvant dans la boucle while je suppose car quand j'enlève les tous les printf, le seg fault persiste et quand j'enlève tous les strncmp dans le while il n'y a plus de seg fault. Le plus bizarre c'est que ca donne bien le résultat auquel j'attends mais avec un seg fault. Voici le résultat de l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 From is found Call-id is found Contact is found m is found Erreur de segmentation
Est ce que quelqu'un aurait une idée d'ou vient ce segfault ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #include <stdio.h> #include <string.h> #include <stdlib.h> #define LIM 1500 #define METHODE "INVITE" int main(){ FILE* fic; fic = fopen(METHODE, "r"); char data[LIM]; if(fic == NULL){ printf("Impossible d'ouvrir le fichier\n"); exit(1); } fread(data, LIM, 1, fic); #ifdef DEBUG printf("%s\n", data); #endif char delims[2] = {0x0D, 0x0A};//CRLF char *line = NULL; if(!strncmp(data, "INVITE", 6)){ line = strtok( data, delims ); while( line != NULL ) { line = strtok( NULL, delims ); if(!strncmp(line, "From", 4)){ printf( "From is found\n"); } if(!strncmp(line, "Call-ID", 7)){ printf("Call-id is found\n"); } if(!strncmp(line, "Contact", 7)){ printf( "Contact is found\n"); } if(!strncmp(line, "m=", 2)){ printf( "m is found\n" ); } } if(fclose(fic) == EOF) { printf("Probleme de fermeture du fichier \n"); exit(1); } } return 0; }
un gdb me donne :
Merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (gdb) run Starting program: /home/ikuzar/test/sip_parsing/tmp From is found Call-id is found Contact is found m is found Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7b8836c in ?? () from /lib/libc.so.6
Partager