IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme avec cette erreur : "Erreur de segmentation (core dumped)"


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut Probleme avec cette erreur : "Erreur de segmentation (core dumped)"
    Bonjour, j'ai un projet en info a réalisé sur un CHarlyRobot 30, en bref recevoir un fichier en Gcode et le traduire en langage machine CharlyRobot mais la j'ai une erreur donc Erreur de segmentation (core dumped) et je ne sais pas ce que c'est, j'ai cru comprendre que c'etait en raport avec les bufer ou pointeur mais sinon rien d'autre donc voici mon code :
    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    void Mouvement(char *chaine_entrante){
     
    printf("Entrer dans mouvement\n");
     
    /***************************initialisation des variables******************************************************/
    	int ret_rs_open  = 0;
    	unsigned char buffer_methode[5];
    	unsigned char buffer[46];
    	char *pointeur; 
    	int time_mvt =0, num_axe = 0;
    	int compteur_axe = 0;
    	int i = 0, j = 0;
    	int vit_X = 0, vit_Y = 0, vit_Z = 0,vit_Z_retour = 0;
    	char quel_axe;
    	char methode = ' ';
     
    	struct sigaction act;
        act.sa_handler = arret;
    	signal(SIGINT,arret);	/*Interception des signaux ctrl^c et ctrl^z*/
    	signal(SIGTSTP,arret);
     
     
    	ret_rs_open = RS_open("USB1",9600,8,1,'N',1);
     
    	printf("Test avant if");
     
    	if( ( ret_rs_open)!= -1){		/*On test si la liaison à été effectuée, si 'ret_rs_open' est égale à -1 cela veut dire que la liaison n'a pas fonctionner */
     
    /* On utilise la méthode strtok pour isoler les coordonnées et la méthode */
     
    		/*Premier appel du strtok*/
    		pointeur = strtok( chaine_entrante, " " );
     
    		if(strcmp(pointeur,"@0A") == 0){
    			buffer[i] = 0x40;
    			i++;
    			buffer[i] = 0x30;		//Deplacement relatif
    			i++;
    			buffer[i] = 0x41;
    			i++;
    			buffer[i] = 0x20;
    			i++;
    			methode = 'R';
    		}
    		else if(strcmp(pointeur,"@0M") == 0){
    			buffer[i] = 0x40;
    			i++;
    			buffer[i] = 0x30;		//Deplacement absolue
    			i++;
    			buffer[i] = 0x4D;
    			i++;
    			buffer[i] = 0x20;
    			i++;
    			methode = 'A';
    		}
    		else{
    			printf("Erreur de méthode de déplacement \n");
    			close(ret_rs_open);
    			exit(-1);	
    		}
     
     
    		while( pointeur != NULL ){
    			pointeur = strtok( NULL, ",");			/* puis on cherche les autres séparateur */
    			printf("Pointeur : %s \n",pointeur);
    			compteur_axe++;
     
    		/*Test de dépassement de l'espace de travail */
     
    				switch(compteur_axe){
    					case '1' :	quel_axe = 'X';
    								X = *pointeur;
    					case '2' :	quel_axe = 'X';
    								vit_X = *pointeur;
    					case '3' :	quel_axe = 'Y';
    								Y = *pointeur;
    					case '4' :	quel_axe = 'Y';
    								vit_Y = *pointeur;
    					case '5' :	quel_axe = 'Z';
    								Z = *pointeur;
    					case '6' :	quel_axe = 'Z';
    								vit_Z = *pointeur;
    					case '7' :	quel_axe = 'Z';
    								Z_retour = *pointeur;
    					case '8' :	quel_axe = 'Z';
    								vit_Z_retour = *pointeur;
     
    					default : printf("Default compteur axe");	
    				}
     
    			if(methode == 'A'){				/*Test si la methode est absolue*/
     
    				if( ( (*pointeur > 25000) && (compteur_axe == 1 || 2 )  ) || ( (*pointeur > 40000) && (compteur_axe == 3 || 4) ) || ( (*pointeur > 10000) && ( compteur_axe == 5) ) || ( (*pointeur< -10000) && (compteur_axe == 6 ) ) ){
     
    					printf("Erreur :: espace de travail de l'axe %c dépasser",quel_axe);
    					close(ret_rs_open);
    					exit(-1);
    				}
     
    			}
    			else if(methode == 'R'){		/*Ou relatif*/
     
    				if( ( ((*pointeur + X) > 25000) && (compteur_axe == 1 || 2 )  ) || ( (*pointeur > 40000) && (compteur_axe == 3 || 4) ) || ( (*pointeur > 10000) && ( compteur_axe == 5) ) || ( (*pointeur< -10000) && (compteur_axe == 6 ) ) ){ 
     
    					printf("Erreur :: espace de travail de l'axe %c dépasser",quel_axe);
    					close(ret_rs_open);
    					exit(-1);
     
    				}
    			}
     
    /*On lit les caractère scinder par strtok dans pointeur et on les entres dans le buffer pour l'envoie*/
     
    			for(j = 0; j > sizeof(&pointeur ); j++){
    				if(		*pointeur+j == '0')buffer[i] = 0x30;
    				else if(*pointeur+j == '1')buffer[i] = 0x31;
    				else if(*pointeur+j == '2')buffer[i] = 0x32;
    				else if(*pointeur+j == '3')buffer[i] = 0x33;
    				else if(*pointeur+j == '4')buffer[i] = 0x34;
    				else if(*pointeur+j == '5')buffer[i] = 0x35;
    				else if(*pointeur+j == '6')buffer[i] = 0x36;
    				else if(*pointeur+j == '7')buffer[i] = 0x37;
    				else if(*pointeur+j == '8')buffer[i] = 0x38;
    				else if(*pointeur+j == '9')buffer[i] = 0x39;
    				else if(*pointeur+j == '-')buffer[i] = 0x2D;
    				else{
    					printf("Erreur Caractère non connue"); 
    					close(ret_rs_open);
    					exit(-1);		
    				}
     
    				i++;
    			}
     
    			buffer[i] = 0x2C;
    			i++;
     
    		}
     
    		/********************************************on entre la configuration des axes**************************************************/
    /****On l'entre en dernier car pour connaitre le nombre d'axe il faut avoir finit le comptage d'axe grace a la methode strtok****/
    			buffer_methode[0]  = 0x40;
    			buffer_methode[1]  = 0x30;
     
    			switch(num_axe){			/* Test de num_axe, l'entier caluler grâce au strtok qui definie le nom_axe */
    				case '1' : buffer_methode[2] = 0x31;
    				case '3' : buffer_methode[2] = 0x33;
    				case '7' :
    				default : buffer_methode[2] = 0x37;
    			}
    			buffer_methode[3] = 0x0D;
    		RS_write(buffer_methode,4,ret_rs_open);			/* On envoie sur la liaison le contenu du buffer*/
    		RS_write(buffer,i,ret_rs_open);
     
     
     
    /************************Calcul du temps de déplacement pour faire le mouvement******************************/
     
    		if( (num_axe == '1') || (num_axe == '3') ){
    			time_mvt = 0;
    			time_mvt = (X/vit_X) + (Y/vit_Y);			
     
    		}
    		if( (num_axe == '7') ){
    			if( X > Y )			/*Si la distance X est plus grande que Y */
    			{
    				time_mvt = 0;
    				time_mvt = X/vit_X;		/*on calcule en seconde le temps que mais le charlyrobot pour aller en pos X a la vitesse vit_X*/		
    			}
     
    			else				/*Si la distance Y est plus grande que X */
    			{
    				time_mvt = 0;
    				time_mvt = Y/vit_Y;
    			}
    		}
     
    	}
    	else
    	{
    			printf("Erreur d'ouverture liaison \n");
    			exit(-1);
    	} 
     
    	sleep(time_mvt);
    	printf("Fermeture de la liaison \n");
    	close(ret_rs_open);
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Une erreur de segmentation a une unique cause symptomatique: l'accès à de la mémoire inaccessible.

    Des causes possibles sont:
    • déréférencement d'un pointeur null
    • écriture dans le segment de code (char* s = "alep"; *s='c';)
    • écriture dans n'importe quoi (int base; int *s = &base; *(s-17)=7;)


    Les principales raisons sont soit un code très moche, soit une incompréhension des fonctions de la bibliothèque standard.

    Ici, je dirai que c'est du aux lignes 115 et suivante.
    if( *pointeur+j == '0') ne fais pas ce que tu penses, à cause des priorités. La réalité est if( (*pointeur)+j == '0') alors que tu veux if( *(pointeur+j) == '0').
    Pour plus de lisibilité, tu peux écrire if(pointeur[j] == '0')

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut Re :
    J'ai essayé de remplacé mais j'ai toujours la même erreur !
    Deja j'ai assez de mal la comprendre la différence entre *pointeur et pointeur le premier est le contenu et l'autre le pointeur lui même mais c'est assez vague !

  4. #4
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    *pointeur c'est le contenu, c'est la valeur situé quelque part dans la mémoire.
    pointeur c'est où est en mémoire la valeur i.e l'adresse.


  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut re
    Ok oue d'accord c'est bien sa, c'est assez complexe quand même de comprendre la réels utilité des pointeurs !!

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Premier problème potentiel, tu ne vérifies pas la validité du paramètre char *chaine_entrante ligne 1

    Je vais supposer qu'il est valide mais un test avec NULL et aussi sur sa longueur serait le bienvenu.

    Deuxième problème potentiel ligne 32-34 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		pointeur = strtok( chaine_entrante, " " );
     
    		if(strcmp(pointeur,"@0A") == 0){
    Si ta chaine entrante ne contient pas la chaine " ", pointeur vaut alors NULL. Il faudrait faire un test (ligne 33 justement puisqu'elle est vide) pour gérer ce cas de figure.

    Troisième problème potentiel, j'espère que tu te rends compte que strtok() va modifier la chaine de caractères pointée par la variable chaine_entrante. donc entre "avant" et "après" l'appel à la fonction Mouvement(), ta chaine est modifiée.

    Quatrième problème potentiel : le tableau qui reçoit tes ordres fait 46 octets. Si ta chaine est vraiment longue, tu risques de dépasser les bornes.

    Autre problème ligne 93, ça : *pointeur > 25000, (et les autres, c'est vraiment bizarre).

    pointeur et un char* donc *pointeur est un char et un char ne sera JAMAIS plus grand que 25000, je ne sais pas ce que tu as voulu faire.

    Tes tests ligne 93 et 103 sont compliqués à suivre, fait plus simple car cela ressemble à la chronique d'un bug futur.

    To switch est mal fait ligne 70, il manque tous les break pour chacun des cases.

    Ligne 114 et suivantes, for(j = 0; j > sizeof(&pointeur ); j++){, c'est bizarre.

    En fait, j'ai l'impression que ton code ressemble à ta pensée, c'est confus et donc tu ne sais pas le faire en simple (car je suis persuadé que ce code pourrait s'écrire de manière plus simple) pour permettre à un lecteur externe de comprendre exactement le cheminement du code et donc l'idée qu'il y a derrière.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Hmmm... je ne connais pas le langage CharlyRobot... mais en voyant des @0A... tu travailles quasiment avec des pointeurs...

    Imagine simplement :
    (la mémoire = un grand tableau numéroté)
    pointeur = le numéro d'une case (et juste le numéro de la case)
    *pointeur = le contenu de la case correspondant au numéro
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Plus formellement, on parle d'adresse pour désigner le numéro des cases mémoires.

    Chaque variable est une zone mémoire constituée de plusieures cases voisines.
    Chaque variable possède donc une adresse, qui s'obtient avec l'opérateur &.

    Un pointeur est un type de variable.
    Un pointeur vers int (int*) est une variable dont les valeurs sont des adresses de variables de type int.

    Les pointeurs permettent trois choses:
    • représenter l'optionnel (grace à NULL)
    • transmetttre une référence vers une variable à une fonction (pour qu'elle puisse la modifier)
    • allouer de la mémoire dynamiquement. (listes, tableaux)

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut Re :
    Effectivement ram-0000 c’était assez confus surtout au niveaux des pointeurs sinon pour les problème rapporté par toi même j'ai essayé de les combler

    donc pour le premier j'ai effectué un test sur chaine_entrante pareil un test pour le 2 eme , sinon je n'ai pas très bien compris strtok(), comment sa "chaine_entrante " sera modifié . pour le tableau qui reçoit les ordres le tableau de 46 octet sera suffisant car cette chaîne viendra d'une fonction futur qui créera donc celle-ci mais 46 octet est la taille maximal d'une commande pour le charlyrobot puisque "chaine_entrante" contient ca commande qui au maximum peut être "@0X Px,Vx,Py,Vy,Pz,Vz,Pz retour,Vz retour" ou X représente la méthode A ou M et Px,Vx, Py,Vy ... peuvent varié entre 10 et 40000 pour les P et 150 et 1000 pour les V.
    Problème suivant les long if() effectivement il sont complexe, en fait le voulait tester les valeurs de pointeur successive qui représente les Px et les Vx donc je ne savait pas exactement comment faire et j'ai vu que les char était similaire au int et que donc on pouvait faire un test comme un entier ce qui ma paru bizarre aussi et le long if() était pour éviter de refaire la même chose dans tout les if().

    Voila voila

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Safadoo Voir le message
    ...sinon je n'ai pas très bien compris strtok(), comment sa "chaine_entrante " sera modifié...
    regarde ici : man strtok

    En fait, strtok rajoute des caractères '\0' dans la chaine d'entrée lorsqu'il fait son parsing/découpage (sans oublier qu'il n'est pas réentrant, c'est à dire que si tu fais 2 strtok imbriqués (ou dans 2 thread différents, gare au bugs)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    En faite chaine_entrante sur laquelle est appliqué ici strtok() est différente à chaque entré dans la fonction mouvement donc il peut la modifié la seul chose c'est que je veux isolé les caractères et les entré dans le buffer[] pour par la suite les envoyé sur la liaison serie !

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Le but était de t'informer des limitations de strtok(). Maintenant, si tu les connais et que tu sais que ce n'est pas un problème (parce que tu connais le contexte), alors pas de problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Oui je connais mais je n'étais pas sûr et donc ton affirmation me l'a confirmé , merci

    En attendant cela m’énerve car j'ai toujours cette erreur de segmentation !

    Je pense que comme l'a dit leternel c'est en rapport avec cette partie de code
    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
    for(j = 0; j > sizeof(*pointeur ); j++){
    				if(		(*pointeur+j) == '0')buffer[i] = 0x30;
    				else if((*pointeur+j) == '1')buffer[i] = 0x31;
    				else if((*pointeur+j) == '2')buffer[i] = 0x32;
    				else if((*pointeur+j) == '3')buffer[i] = 0x33;
    				else if((*pointeur+j) == '4')buffer[i] = 0x34;
    				else if((*pointeur+j) == '5')buffer[i] = 0x35;
    				else if((*pointeur+j) == '6')buffer[i] = 0x36;
    				else if((*pointeur+j) == '7')buffer[i] = 0x37;
    				else if((*pointeur+j) == '8')buffer[i] = 0x38;
    				else if((*pointeur+j) == '9')buffer[i] = 0x39;
    				else if((*pointeur+j) == '-')buffer[i] = 0x2D;
    				else{
    					printf("Erreur Caractère non connue"); 
    					close(ret_rs_open);
    					exit(-1);		
    				}
     
    				i++;
    			}
    j'explique ma vision qui doit être fausse, pour donc pointeur identifie l'adresse de la chaîne de caractère isolé et donc ici pour moi par exemple "10000" si chaîne_entrante es "@0A 10000,1000,1500,1000" pour le premier passage de strtok donc une fois le pointeur pointant 10000 je faisait un test caractère par caractère afin de le transformer en sa valeur ASCII unitaire afin de l'envoyer via la liaison série !! Ma question Est-ce que cette partie le fait ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    leternel t'a déjà fourni la réponse :
    Citation Envoyé par leternel Voir le message
    Ici, je dirai que c'est du aux lignes 115 et suivante.
    if( *pointeur+j == '0') ne fais pas ce que tu penses, à cause des priorités. La réalité est if( (*pointeur)+j == '0') alors que tu veux if( *(pointeur+j) == '0').
    Pour plus de lisibilité, tu peux écrire if(pointeur[j] == '0')
    Donc remplace tous tes if((*pointeur+j) == 'N') par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(*(pointeur+j) == 'N')
    ou

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    A oui mince désolées ça y est remplacé mais toujours cette erreur c'est énervant !!

  16. #16
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    A un moment, il faut apprendre à utiliser le debugger. La première fois, c'est peut être un peu dur mais cela permet de gagner un ntemps fou sur ce genre de problèmes.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Euh je veux bien mais comment on fait ??

    ps : je travaille juste sur gedit

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    C'est bon j'ai trouver et donc voici mon resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Program received signal SIGSEGV, Segmentation fault.
    0xb7e9a845 in strtok () from /lib/i386-linux-gnu/libc.so.6
    je vais analyser ceci !!

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Cool !! j'ai trouver j'ai fait une copie de la chaine_entrante et je modifiais donc la copie et plus d'erreur !!

  20. #20
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Troisième problème potentiel, j'espère que tu te rends compte que strtok() va modifier la chaine de caractères pointée par la variable chaine_entrante. donc entre "avant" et "après" l'appel à la fonction Mouvement(), ta chaine est modifiée.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Erreur de segmentation (core dumped) avec dsyev/dspev
    Par juliefournet dans le forum Fortran
    Réponses: 1
    Dernier message: 09/02/2013, 20h42
  2. Réponses: 6
    Dernier message: 14/01/2008, 16h47
  3. erreur de segmentation core dumped
    Par panganino dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2008, 12h45
  4. Réponses: 5
    Dernier message: 04/11/2007, 13h39
  5. Probleme avec Make -->[all-recursive] Erreur 1
    Par lolodelp dans le forum Installation
    Réponses: 3
    Dernier message: 18/04/2006, 23h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo