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
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut Erreur de segmentation
    Bonjour,
    Je débute en c++ et j'ai écris un petit programme reproduisant le jeu de la vie de Conway pour m’exercer.
    A la compilation pas de soucis mais lorsque je l’exécute la console renvoie "Erreur de segmentation (core dumped)".
    Je sais qu'il s'agit d'un problème de référencement mais je suis incapable de le trouver! Quelqu'un saurait-il m'aider?

    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
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
     
    using namespace std;
     
    void afficher(int grille[19][19]) //affiche la grille : si la cellule
    {                                        //est vivante affiche O sinon #
    	for(int i = 0; i<20; i++)
    	{
    		for (int j = 0; j<20; j++)
    		{
    			if (grille[i][j] == 1)
    			cout<<"O";
    			else cout<<"#";
    		}
    		cout<<endl;
    	}
    }
     
     
    void initialiser(int grille[19][19]) //la grille est initialisée aléatoirement
    {
    	int alea (0);
    	for(int i = 0; i<20; i++)
    	{
    		for (int j = 0; j<20; j++)
    		{
    			alea = rand() % 2;
    			if (alea == 0)
    			grille[i][j] = 0;
    			else grille[i][j] = 1;
    		}
    	}
    }
     
    void suivant(int grille[19][19])
    {	
    	int tmp[19][19];
    	int count;
    	bool chg(true);
    	for(int i = 0; i<20; i++)    // crée une copie de la grille car la grille est mutée
    	{
    		for(int j = 0; j<20; j++)
    		{
    			tmp[i][j]=grille[i][j];
    		}
    	}
    	for(int i=0; i<20; i++)
    	{
    		for (int j = 0; j<20; j++)
    		{
    			count = tmp[(i+19)%20][(j+19)%20] +   //compte le nombre de cellules vivantes
    				tmp[(i+19)%20][j%20] +
    				tmp[(i+19)%20][(j+1)%20] +
    				tmp[i%20][(j+19)%20] +
    				tmp[i%20][(j+1)%20] +
    				tmp[(i+1)%20][(j+19)%20] +
    				tmp[(i+1)%20][j%20] +
    			        tmp[(i+1)%20][(j+1)%20];
    			if (count < 2)          //Si il est inférieur a deux la cellule est morte
    			{grille[i][j] = 0;
    			chg = true;}
    			else if (count > 2)   //Sinon la cellule est vivante
    			{grille[i][j] = 1;
    			chg = true;}
    		}
    	}
    if(chg == false)                       //Renvoie un message si il ne se passe plus rien
    cout<<"grille stable"<<endl;
    }				
     
     
    int main()
    {
    	srand(time(0));
    	int grille[19][19];
    	char buffer;
    	initialiser (grille);
    	while (buffer == 'y')
    	{
    		suivant(grille);
    		afficher(grille);
    		cout<<"next?"<<endl;
    		cin>>buffer;
    	}
    	return 0;
    }

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par sweetchildomine Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void afficher(int grille[19][19]) //affiche la grille : si la cellule
    {                                        //est vivante affiche O sinon #
    	for(int i = 0; i<20; i++)
    	{
    Ta définition du tableau grille implique des indices allant de 0 à 18, or tu vas jusqu'à 19...

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Par défaut
    Merci! Autant pour moi, je pensais que 19 était l'indice de la dernière case mais c'est bien le nombre de cases...

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    A la déclaration, c'est le nombre de cases. A l'utilisation c'est l'indice dans le tableau, rien de surprenant là-dedans ^^.
    Sinon, à part pour cout, ton code est en C, pas en C++.
    En C++, on utiliserait les std::vector ou dans ton cas les std::array, et les itérateurs pour parcourir les tableaux.
    Je te conseille de te documenter dessus, si tu cherches réellemment à faire du C++.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

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