Erreur de segmentation
Fermé
safadoo
-
31 mai 2013 à 16:52
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 1 juin 2013 à 13:41
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 1 juin 2013 à 13:41
A voir également:
- Erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
1 réponse
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 1/06/2013 à 13:50
Modifié par Hxyp le 1/06/2013 à 13:50
Bonjour,
Il y a plusieurs problèmes déjà remplacez la boucle while par ça :
ensuite il y aura un problème avec les sprintf qui suivent car vous n'allouez pas la mémoire alors que ce ne sont que des pointeurs il faudra alors changer les variables : char *X_char, *Y_char, *Z_char;
par un truc du genre :
char X_char[8],Y_char[8],Z_char[8];
il y aura un autre problème avec buffer_envoie, les strcat n'allouent pas plus de mémoire que sprintf et buffer_envoie n'est qu'un pointeur donc le modifier par, par exemple :
char buffer_envoie[4096];
qui permettra aussi à strcat de fonctionner par la même.
Et il vous faudra modifier les lignes du genre :
ça on ne peut pas le faire après la déclaration d'un pointeur/tableau seulement pendant la déclaration qu'on le peut, bref pouvez utiliser strcpy qui existe pour ce genre de truc :
Après reste un problème dans la façon dont vous vérifiez :
alors que juste au dessus le if avec G00 et le strtok met la var pointeur à NULL enfin faut remanier un peu tout ça.
Edit: pour trouver la ligne qui fait planter le programme compiler avec l'option -g de gcc,
par exemple si le programme se trouve dans main.c, utilisez :
gcc -g main.c -o main
ensuite ne lancez par le programme de cette façon :
./main
mais utiliser le debugger gdb, faites ainsi :
gdb main
puis lorsque gdb est lancé envoyez la commande "run" ou le raccourci "r" :
r
gdb va lancer le programme et quand ça plante il donne de l'info, vous pouvez utiliser la commande "backtrace" ou le raccourci "bt" pour remonter le problème :
bt
Il y a plusieurs problèmes déjà remplacez la boucle while par ça :
printf("juste avant while \n"); pointeur = strtok(NULL," "); while(pointeur!=NULL){ printf(test while\n"); pointeur_tmp=pointeur; if(*pointeur_tmp=='X') X_int=atoi(++pointeur); else if(*pointeur_tmp=='Y') Y_int=atoi(++pointeur); else if(*pointeur_tmp=='Z') X_int=atoi(++pointeur); pointeur=strtok(NULL," "); }
ensuite il y aura un problème avec les sprintf qui suivent car vous n'allouez pas la mémoire alors que ce ne sont que des pointeurs il faudra alors changer les variables : char *X_char, *Y_char, *Z_char;
par un truc du genre :
char X_char[8],Y_char[8],Z_char[8];
il y aura un autre problème avec buffer_envoie, les strcat n'allouent pas plus de mémoire que sprintf et buffer_envoie n'est qu'un pointeur donc le modifier par, par exemple :
char buffer_envoie[4096];
qui permettra aussi à strcat de fonctionner par la même.
Et il vous faudra modifier les lignes du genre :
buffer_envoie = "@0M " ;
ça on ne peut pas le faire après la déclaration d'un pointeur/tableau seulement pendant la déclaration qu'on le peut, bref pouvez utiliser strcpy qui existe pour ce genre de truc :
strcpy(buffer_envoie,"@0M");
Après reste un problème dans la façon dont vous vérifiez :
if( strcmp ( pointeur,"G01" ) == 0 ){
alors que juste au dessus le if avec G00 et le strtok met la var pointeur à NULL enfin faut remanier un peu tout ça.
Edit: pour trouver la ligne qui fait planter le programme compiler avec l'option -g de gcc,
par exemple si le programme se trouve dans main.c, utilisez :
gcc -g main.c -o main
ensuite ne lancez par le programme de cette façon :
./main
mais utiliser le debugger gdb, faites ainsi :
gdb main
puis lorsque gdb est lancé envoyez la commande "run" ou le raccourci "r" :
r
gdb va lancer le programme et quand ça plante il donne de l'info, vous pouvez utiliser la commande "backtrace" ou le raccourci "bt" pour remonter le problème :
bt