Bonjour, je viens vous demander un peu d'aide.
Je travaille sur un programme en C depuis 3 ans, et j'utilisais gcc3.
De nouvelles contraintes m'imposent gcc4 et je ne pensais pas que j'aurais eu autant de problemes.
Apres avoir mieux ecrit les cast, j'ai réussi à compiler mon programme sans erreur, ni warning.
Malheuresement à l'execution, j'obtiens un Segmentation fault.
Gdb me dit :
La ligne incriminée est l'utilisation de sprintf.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Program received signal SIGSEGV, Segmentation fault. 0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6 (gdb) info thread * 1 Thread -1214757184 (LWP 4736) 0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6 (gdb) backtrace #0 0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6 #1 0x0804a4b9 in litConfig () at prog.c:300 #2 0x080a8a97 in main (argc=1, argv=0xbf815b64) at prog.c:20691 (gdb) frame 0 #0 0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6
Je résume la partie de code qui pose pb :
Je pense que gcc4 n'aime pas cette façon de faire sans malloc.
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 int litConfig() { FILE * conf ; char buffer[150]; char ligne[100]; char* separateurs = { " \n" }; char* p; char pt[30]; strcpy(buffer,DOSSIERCONF); strcat(buffer,"/config"); if((conf = fopen (buffer,"r")) == NULL) { printf("Erreur ouverture config %s",buffer); return 0; } while (fgets (ligne, sizeof(ligne), conf) != NULL) { //premier appel, renvoie le premier mot p = strtok(ligne, separateurs); // ligne où gdb annonce l'erreur : sprintf(pt,"%s", p); if (!strcmp(p,"fullscreen")) { if (p != NULL ) p = strtok(NULL, separateurs); sprintf(pt,"%s", p); if (p != NULL ) config.FULLSCREEN=atoi(pt); } } }
Savez vous comment je peux corriger cela ?
Merci pour votre aide.
Partager