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

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;
}
Est ce que quelqu'un aurait une idée d'ou vient ce segfault ?

un gdb me donne :

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
Merci d'avance pour votre aide.