Bonsoir,j'ai un problème avec un program C ,quand j'execute avec la commande gcc il me met :" ERREUR DE SEGMENTATION"
Bonsoir,j'ai un problème avec un program C ,quand j'execute avec la commande gcc il me met :" ERREUR DE SEGMENTATION"
Hmmm, tu n'exécutes pas vraiment ton programme avec gcc, si? Tu compiles avec gcc seulement...quand j'execute avec la commande gcc il me met :" ERREUR DE SEGMENTATION"
Par contre, si tu compiles vraiment avec gcc et t'obiens une erreur de segmentation, fais voir le code qui le provoque...
Jc
Comme ca on peut rien te dire, il faut un code compilable reduit au minimum ou bien, si tu sais d'où viens le problème, post le code en question !
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
le code est un peu long et je n'arrive pas à le coller à cette page esk vous pouvez me donner votre mail,je vous l'envoie par attach
Et la marmotte....Envoyé par Korma
![]()
qu'est ce que la marmotte,?e m'excuse je suis un noviste
Revenons au problème de départ...quand j'execute avec la commande gcc il me met :" ERREUR DE SEGMENTATION"
Quel est ton cas:
- Tu as un code qui est super long, tu le compiles avec gcc (il y a combien de fichiers?) et gcc fait une erreur de segmentation... S'il y a plusieurs fichiers tu peux donc savoir quel fichier pose problème...
- Tu compiles, tout fonctionne, mais lorsque tu lances ton programme, il fait une erreur de segmentation...
C'est quoi comme programme d'ailleurs??
j'ai deux fichiers un objet .o et un autre .c ,le .c fait 128 lignes ,dites moi comment lous le montrer et je vous le donne
Tu fais un copier / collé du .c dans le corps du message et tu l'encadres avec des balises codes. Tout çà est évidemment expliqué dans les regles du forum que tu aurais dû lire avant de poster...Envoyé par Korma
Pour le .o, tu n'as pas le source ?
Celui-ci, il faudrait le déposer sur un serveur web et que tu nous donnes l'url, ainsi que la machine pour lequel il a été compilé.
jvoici le code:
[/list]
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <ctype.h> #define ip "62.39.109.164" #define port "5757" #define diff "001" typedef struct { char version_tc[5]; char dateq_tc[14]; char type_tc[5]; char numquestion_tc[10]; char site_tc[7]; char rang_tc[2]; char cle_tc[8]; char identifiant_tc[10]; char montant_tc[10]; char devise_tc[3]; char reference_tc[250]; char porteur_tc[19]; char dateval_tc[4]; char cvv_tc[3]; char activite_tc[4]; char archivage_tc[12]; char numappel_tc[10]; char numtrans_tc[10]; char autorisation_tc[10]; char codereponse_tc[5]; char commentaire_tc[100]; char serveurip_tc[13]; char serveurport_tc[4]; char differe_tc[3]; char Reference_abonne_tc[250]; }trameppps; /* d?claration de toutes les fonctions propres ? l'objet. Seule la fonction "appel_ppps()" sera utilis?e dans cet exemple */ extern char * code_ppps_abonne(char* psTrameToCode,int* piReturnCode); extern int decode_ppps_abonne(char* psTrameToCode,trameppps * questrep_st); extern int appel_ppps_abonne(trameppps* questrep_st); /* ce programme va r?cup?rer les donn?es dynamiques en param?tre, remplir la structure et appeler la fonction appel_ppps() pour afficher les donn?es retourn?es par Paybox sur la sortie standard */ int main(int argc, char *argv[]) { /*cr?ation d'une structure nomm?e "structtrames" */ trameppps structtrames; /* d?claration de diff?rentes variables */ int i,resultat; char reponse[256]; // int taill_numappel,taill_numtrans,taill_auto; if(argc!=8) { printf("erreur parametres(fonction,date 14,numquestion 10,montant 10,reference 250,porteur 19,dateval 4,cvv 3)\n"); return 0; } //questrep_st=(trameppps*)malloc(sizeof(trameppps)); // initialisation de la structure ? vide memset(structtrames.version_tc,0,sizeof(structtrames)); //remplissage de la structure (tous les champs de la trame question) strncpy(structtrames.version_tc,"00103",5); strncpy(structtrames.dateq_tc,argv[1],14); // premier argument du programme : Date et heure strncpy(structtrames.type_tc,"00003",5); strncpy(structtrames.numquestion_tc,argv[2],10); // Second argument du programme : Num de question strncpy(structtrames.site_tc,"1999888",7); strncpy(structtrames.rang_tc,"92",2); strncpy(structtrames.cle_tc,"LMFENRJB",8); strncpy(structtrames.identifiant_tc,"",10); strncpy(structtrames.montant_tc,argv[3],10); // troisi?me argument : Montant strncpy(structtrames.devise_tc,"978",3); strncpy(structtrames.reference_tc,argv[4],250); // Quatri?me argument : R?f?rence Commande strncpy(structtrames.porteur_tc,argv[5],19); //Cinqui?me argument : Num de la carte strncpy(structtrames.dateval_tc,argv[6],4); //Sixi?me argument : Date de fin de validit? de la carte strncpy(structtrames.cvv_tc,argv[7],3); // Septi?me argument : Valeur du cryptogramme visuelle strncpy(structtrames.activite_tc,"024",3); strncpy(structtrames.archivage_tc,"boutiquetest",12); strncpy(structtrames.numtrans_tc,"",10); strncpy(structtrames.numappel_tc,"",10); strncpy(structtrames.serveurip_tc,ip,13);//ip strncpy(structtrames.serveurport_tc,port,4);//port strncpy(structtrames.differe_tc,diff,4); //c="00103&09122005181020&00003&0000000012&1999888&99&1999888I&1206548523&0000001250&978&bhfr4323&0000000000000123152&0206&023&024"; printf("l'adresse ip et le port a l'envoi:\n"); printf("Adresse ip:%-10.13s\n",structtrames.serveurip_tc); printf("Le port est:%-10.4s\n",structtrames.serveurport_tc); printf("Le differe_tc est :%-10.3s\n",structtrames.differe_tc); // appel de la fonction "appel_ppps()" de l'objet payboxpppsclient.o //printf("%s",code_ppps_abonne(c,0)); /* printf("%s\n",questrep_st->montant_tc); printf("%s\n",questrep_st->devise_tc); printf("%s\n",questrep_st->reference_tc); printf("%s\n",questrep_st->porteur_tc); printf("%s\n",questrep_st->dateval_tc); printf("%s\n",questrep_st->cvv_tc); printf("%s\n",questrep_st->activite_tc); printf("%s\n",questrep_st->archivage_tc); printf("%s\n",questrep_st->numtrans_tc); printf("%s\n",questrep_st->archivage_tc); printf("%s\n",questrep_st->numtrans_tc); printf("%s\n",questrep_st->numappel_tc); printf("%s\n",questrep_st->serveurip_tc);//ip printf("%s\n",questrep_st->serveurport_tc);//port printf("%s\n",questrep_st->differe_tc); */ /*appel de la fonction appel_ppps */ resultat=appel_ppps_abonne(&structtrames); // initialisation du tableau de caract?res reponse ? vide memset(reponse,0,sizeof(reponse)); /* renvoi du r?sultat d'appel_ppps(),numquestion,numappel,numtrans,autorisation,codereponse,commentaire. toutes ces donn?es sont s?par?es par des tirets */ sprintf(reponse,"%d-%-10.10s-%-10.10s-%-10.10s-%.*s-%-5.5s-%.*s\0",resultat,structtrames.numquestion_tc,structtrames.numappel_tc,structtrames.numtrans_tc,strlen(structtrames.autorisation_tc),structtrames.autorisation_tc,structtrames.codereponse_tc,strlen(structtrames.commentaire_tc),structtrames.commentaire_tc); printf("%s\n",reponse); return 1; }
Tu peux donner une exemple de ligne de commande ?Envoyé par Korma
ça ?printf("erreur parametres(fonction,date 14,numquestion 10,montant 10,reference 250,porteur 19,dateval 4,cvv 3)\n");![]()
Lorsque tu lances le programme (et en réitérant la question d'Emmanuel: donne un exemple de lancement du programme), qu'affiche-t-il exactement?
Sinon tout me semble correct bien que TRES TRES moche mais bon...
Sauf ici ou ca devrait etre:
Et:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //C'etait comme ceci: strncpy(structtrames.activite_tc,"024",3); //Je mettrais: strncpy(structtrames.activite_tc,"024",4);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //c'etait comme ceci char differe_tc[3]; //Ca devrait etre: char differe_tc[4];
Enfin, dans le doute:
Mais je dis ca en lisant en diagonale, c'est quand même un peu moche comme code, je comprend pourquoi t'étais rétiscent à le montrer!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //c'etait comme ceci sprintf(reponse,...); //je mettrais: snprintf(reponse,250,....);![]()
Maintenat je n'ai plus l'erreur de segmentation car j'ai fais des modifs dans le code ,il m'affiche çaLE 10 est une erreur qui correspond à :"format de la date de fin de validité incorrect", en plus les autres résultats ne sont pas affichés ,il met des vides
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [root@KOR root]# cd /root/.gnome-desktop/paybox/ [root@KOR paybox]# gcc -o exec testppps1.c payboxpppsclient_RedHat8.o [root@KOR paybox]# ./exec 13122005181630 0000010320 0000505755 j6omùjùjo5454 4235835190012614159 0107 024 l'adresse ip et le port a l'envoi: Adresse ip:62.39.109.164 Le port est:5757 Le differe_tc est :001 10-0000010320- - -- - [root@KOR paybox]#
Enleve les parametre et regarde ce que ca donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(reponse,"%d-%-10.10s-%-10.10s-%-10.10s-%.*s-%-5.5s-%.*s\0",resultat,structtrames.numquestion_tc,structtrames.numappel_tc,structtrames.numtrans_tc,strlen(structtrames.autorisation_tc),structtrames.autorisation_tc,structtrames.codereponse_tc,strlen(structtrames.commentaire_tc),structtrames.commentaire_tc);
Et on remarque que tu as 9 arguments après la chaine de caractères et en plus certains sont des entiers mais tu les définis comme string... Pas génial...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 sprintf(reponse,"%d %s %s %s %s %s %s", resultat, structtrames.numquestion_tc, structtrames.numappel_tc, structtrames.numtrans_tc, strlen(structtrames.autorisation_tc), structtrames.autorisation_tc, structtrames.codereponse_tc, strlen(structtrames.commentaire_tc), structtrames.commentaire_tc);
Fais un printf pour voir ce qu'il y a dedans avant... (tu avais ça avant mais tu l'as enlevé...)
Jc
Partager