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


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut erreur de segmentation
    Bonsoir à tous,
    J'ai une erreur de segmentation ici à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        *(population+i*nbVilles)=vDepart;
    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
    void creerIndividus (struct ville *v, const long vDepart, const long nbVilles, const long nbIndividu, long *population)
    {
    int i, j, tempVerif;
     
    //Tableau où l'on mettra 1 si la ville a déja été positionnée.
    long verifDoublon[nbIndividu][nbVilles];
     
    //Initialisation du tableau de vérifications à 0.
    for (i=0 ; i<nbIndividu ; i++)
    {
        for (j=0 ; j<nbVilles ; j++)   verifDoublon[i][j]=0;
    }
     
    //    //On place la ville de départ en première position de l'individu.
        for (i=0 ; i<nbIndividu ; i++)
        {
            *(population+i*nbVilles)=vDepart;
         //   verifDoublon[i][vDepart]=1;
        }
    }
    Déclaration de la structure population :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        //La population sera un tableau à 2dim de taille [nbIndividu][nbVilles].
        long population[nbIndividus][dimension];
    Appel dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      creerIndividus(v,indexVille,dimension,nbIndividus,*population);
    Une idée svp pour ca?
    merci

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    J'ai l'impression que choux et carottes sont un peu mélangées :
    population est un tableau de tableau, or il est considéré comme un simple tableau (passage pas pointeur) dans la fonction creerIndividus.

    On peut faire ça plus simplement : au lieu de faire de l'algorithme de pointeur, on passe par l'opérateur [].
    Une fois que ce code fonctionnera, on pourra remplacer les [] par des *().

    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
    #define NB_INDIVIDUS 15
    #define NB_VILLES 10
     
    /*La population sera un tableau à 2dim de taille [nbIndividu][nbVilles].*/
    long population[INDIVIDUS][VILLES];
     
    /*A noter : la prototype a changé : population est un pointeur de pointeur*/
    void creerIndividus(struct ville *v, const long vDepart, const long nbVilles, 
                        const long nbIndividu, long **population)
    {
        int i, j, tempVerif;
     
        /*Tableau où l'on mettra 1 si la ville a déja été positionnée.*/
        long verifDoublon[nbIndividu][nbVilles];
     
        /*Initialisation du tableau de vérifications à 0.*/
        for (i=0 ; i<nbIndividu ; i++) {
            for (j=0 ; j<nbVilles ; j++) {
                verifDoublon[i][j]=0;
            }
        }
     
        /*On place la ville de départ en première position de l'individu.*/
        for (i=0 ; i<nbIndividu ; i++) {
            population[i][vDepart] = 1;
        }
    }

  3. #3
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Merci Mabu, mais ca me semble bizarre cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /*On place la ville de départ en première position de l'individu.*/
        for (i=0 ; i<nbIndividu ; i++) {
            population[i][vDepart] = 1;
        }
    On veut mettre la ville de départ qui est une chaine à la 1ere position

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par étoile de mer Voir le message
    [...]On veut mettre la ville de depart à la 1ere position
    Ok, dans ce ca, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i=0 ; i<nbIndividu ; i++) {
            population[i][0] = vDepart;
        }
    Citation Envoyé par étoile de mer Voir le message
    [...]depart qui est une chaine
    Attention, dans ce cas, une partie de ton code est à revoir, tu dis que la ville de départ est une chaine, mais tu passes un const long à la fonction.

    Si on doit travailler avec des chaines de caractères, le problème sera un peu plus ardu.

    Peux tu nous expliquer ce que doit stocker le tableau population ?
    Dernière modification par Invité(e) ; 04/01/2010 à 13h23. Motif: oublie balises code

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Citation Envoyé par étoile de mer Voir le message
    Merci Mabu, mais ca me semble bizarre cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /*On place la ville de départ en première position de l'individu.*/
        for (i=0 ; i<nbIndividu ; i++) {
            population[i][vDepart] = 1;
        }
    On veut mettre la ville de départ qui est une chaine à la 1ere position
    Il y a une petite confusion, on ne place pas la ville elle meme, mais son indice !

    Par exemple, v1 a l'indice 0, v2 a l'indice 1 ...

  6. #6
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Merci SoftEvans,
    mais l'erreur persiste encore

  7. #7
    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
    Si je comprend bien ce que tu as marqué (beaucoup) plus haut tu veux avoir une ville de départ vDepart et ensuite tirer le reste des villes au hasard. C'est bien ça ?

    Si c'est ça le plus simple c'est tout mettre dans un tableau, avec vDepart à l'indice 0. Ensuite tu mélanges ton tableau
    Tu fais une boucle en partant de l'indice le plus élevé, jusqu'à l'indice 1.
    Et à chaque fois tu tires un nombre au hasard compris entre 1 et l'indice (inclus). Et tu échanges ces 2 valeurs.

    Si ce n'est pas ça j'ai pas compris ce que tu veux faire

  8. #8
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Si je comprend bien ce que tu as marqué (beaucoup) plus haut tu veux avoir une ville de départ vDepart et ensuite tirer le reste des villes au hasard. C'est bien ça ?

    Si c'est ça le plus simple c'est tout mettre dans un tableau, avec vDepart à l'indice 0. Ensuite tu mélanges ton tableau
    Tu fais une boucle en partant de l'indice le plus élevé, jusqu'à l'indice 1.
    Et à chaque fois tu tires un nombre au hasard compris entre 1 et l'indice (inclus). Et tu échanges ces 2 valeurs.

    Si ce n'est pas ça j'ai pas compris ce que tu veux faire
    Oui mais dans l'enoncé on ma indiqué d'utilisé rand()
    je vois pas trop

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  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