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 :

erreur de segmentation au 4eme tour de boucle


Sujet :

C

  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut erreur de segmentation au 4eme tour de boucle
    bonjour à tous,

    je suis actuellement en train d'apprendre à programmer en C. On en est aux pointeurs.
    Je suis sur un exercice qui consiste à développer une fonction decompose qui décompose un mot en voyelles d'un coté et consonnes de l'autre. Le prototype de la fonction doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void decompose (char *src, char **voyelles, char **consonnes);
    Voici ce que j'ai fait jusqu'à présent:
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    /* La fonction decompose decompose un mot en voyelles et consonnes
    entree : 
    - pointeur vers le mot a decomposer
    - adresse de la chaine de voyelles
    - adresse de la chaine de consonnes
    */
    void decompose (char *src, char **voyelles, char **consonnes);
     
    void decompose (char *src, char **voyelles, char **consonnes)
    {
    	int indice_src = 0, indice_voyelles = 0, indice_consonnes = 0;
    	char caractere_courant = src[indice_src];
     
    	printf("BOUCLE\n");
    	while (caractere_courant != '\0')
    	{
    		printf("caractere_courant : %c, indice_src = %d, indice_voy = %d, indice_cons = %d\n", caractere_courant, indice_src, indice_voyelles, indice_consonnes);
    		if(caractere_courant ==  'a' || caractere_courant ==  'e' || caractere_courant ==  'i' || caractere_courant ==  'o' || caractere_courant ==  'u' || caractere_courant ==  'y')
    		{
    			*voyelles[indice_voyelles] = caractere_courant;
    			indice_voyelles  ++;
    		}
    		else
    		{
    			*consonnes[indice_consonnes] = caractere_courant;
    			indice_consonnes  ++;
    		}
     
    		indice_src ++;
    		caractere_courant = src[indice_src];
    	}
     
    	printf("FIN BOUCLE\ncaractere_courant : %c, indice_src = %d, indice_voy = %d, indice_cons = %d\n", caractere_courant, indice_src, indice_voyelles, indice_consonnes);
     
    	*voyelles[indice_voyelles]  = '\0';
    	*consonnes[indice_consonnes] = '\0';
    }
     
    main()
    {
    	char *voyelles_mot, *consonnes_mot, *mot = "these";
     
    	voyelles_mot = (char*) malloc(10 * sizeof(char));
    	consonnes_mot = (char*) malloc(10 * sizeof(char));
     
    	decompose(mot, &voyelles_mot, &consonnes_mot);
     
    	printf("mot : %s\nvoyelles : %s\nconsonnes : %s\n", mot, voyelles_mot, consonnes_mot);
     
     
    	free(voyelles_mot);
    	free(consonnes_mot);
    }
    J'ai mis pas mal de printf pour le debuggage car au 4eme tour de boucle (quelque soit le mot que je passe en parametre source) j'obtiens toujours l'erreur suivante: D'après ce que j'ai lu dans la doc, une erreur de segmentation apparait quand on tape dans la mémoire qui n'appartient pas au programme. Mais ici, le mot à décomposer fait plus de 4 caractères, et j'ai allouer 10 caracteres à chacun des tableaux qui contiendront voyelles et consonnes. Je ne comprends pas d'où vient le problème.
    Si quelqu'un a une idée pour m'aiguiller, car là je tourne en rond

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Comme tu envoies un pointeur sur un tableau à ta fonction, il faut que dans ta fonction tu l'utilises comme un pointeur de tableau
    En gros il te manque des parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (*voyelles)[indice_voyelles]
    (*consonnes)[indice_consonnes]

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	decompose(mot, &voyelles_mot, &consonnes_mot);
    D'ailleurs, quel est l'intérêt de passer l'adresse des pointeurs plutôt que simplement les pointeurs ?

  4. #4
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    c'était donc ça

    Merci

    En fait, le prof nous a pas appris comment marchait un pointeur sur un tableau sans doute pour qu'on trouve par nous même, donc j'avais fait avec ma logique et ma compréhension des pointeurs

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	decompose(mot, &voyelles_mot, &consonnes_mot);
    D'ailleurs, quel est l'intérêt de passer l'adresse des pointeurs plutôt que simplement les pointeurs ?
    Je sais pas, le prof nous a dit d'utiliser le prototype suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void decompose (char *src, char **voyelles, char **consonnes);
    et qu'avec ce prototype il fallait passé l'adresse des pointeurs.
    Il se peut que le but soit purement pédagogique.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il se peut que le but soit purement pédagogique.
    Oui. De toute façon, il te faut suivre les directives de ton prof.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de Segmentation en fin de boucle
    Par SebHaLEau dans le forum C
    Réponses: 5
    Dernier message: 12/02/2013, 22h37
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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