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 :

Problème initialisation tableau 2D


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème initialisation tableau 2D
    Bonjour à tous mes lecteurs !

    Voila j'ai un tout petit soucis de rien du tout, une fonction d'initialisation qui me fait une erreur de segmentation ... J'ai beau chercher je ne voit pas l'erreur.

    voila le code que j'expliquerais juste après :

    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
    struct Case
    {
        int x;
        int y;
        int numCaseL;
        int numCaseC;
    };
     
    void initTableau(Case tab[][4])
    {
        int j = 0;
        for(int i=0;i<9;i++)
        {
            for(int i=0;i<5;i++)
            {
                tab[j][i].x = 25;
                tab[j][i].y = 20*i;
                tab[j][i].numCaseL = 20;
                tab[j][i].numCaseC = 20;
            }
            j++;
        }
    }
    Donc je cherche à initialiser un tableau de case qui est censé représenter une grille. l'initialisation fonctionnait jusqu'à présent mais depuis que j'ai rajouter les champs numCaseL et numCaseC et que j'essaie de les initialiser de la même manière, sa plante !

    Merci de m'aider a résoudre ce petit problème.

    EDIT : J'ai oublier de préciser que ce code reprends des principes du C mais est en réalité compilé comme du C++. Il parait que pédagogiquement il vaut mieux voir une bibliothèque qui n'est pas orientée objet au début ... J'utilise donc la SDL

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Ta fonction prend tab[][4], mais dedans tu accedes a tab[j][i] avec i variant de 0 a 8...
    Ca ne te choque pas ?

    [Edit]
    Tes deux boucles ont pour indice i... Il est tres peu probable que ce soit ca que tu veuilles faire.
    Du coup, le j++ n'a pas sa place.

    [Edit 2]
    Non, en fait, c'est encore pire que ca, car tu ecris deux fois de suite for (int i...

    Sauf si tu fais des trucs vraiment tordus, je te conseille de reprendre tranquillement les bases des boucles.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    euhh ...

    certes il y a conflit ... cependant le code que j'ai posté est légèrement moins récent que celui que j'utilise et il ne fonctionne pas non plus ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void initTableau(Case tab[][4])
    {
        for(int j=0;j<9;j++)
        {
            for(int i=0;i<5;i++)
            {
                tab[j][i].x = 25;
                tab[j][i].y = 20*i;
                tab[j][i].numCaseL = 20;
                tab[j][i].numCaseC = 20;
            }
        }
    }
    Je trouve que tu vas vite en besogne en me disant d'aller revoir les boucles ... Je code en six langages différent ... donc je n'ai pas beoins de revoir les boucles ou les structures conditionnelles . Je partais du principe que si mon compilo (g++) ne me signale pas une redéclaration de i, il n'y avais pas de problème.

    EDIT : Après vérif au débugguer, le conflit n'a pas lieu mais certes c'est plus compréhensible de cette manière je te l'accorde. Sa ne méritais tout de même pas un vulgaire "retourne voir le cours sur les boucles débutant"

    EDIT 2 : Les deux lignes qui pose problème, ce sont les .numCase encore une fois. Commentées, l'algo tourne, on les dé-commente et on se retrouve avec une erreur de segmentation.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par MasterNico Voir le message
    certes il y a conflit ... cependant le code que j'ai posté est légèrement moins récent que celui que j'utilise et il ne fonctionne pas non plus ...

    Je trouve que tu vas vite en besogne en me disant d'aller revoir les boucles ... Je code en six langages différent ... donc je n'ai pas beoins de revoir les boucles ou les structures conditionnelles . Je partais du principe que si mon compilo (g++) ne me signale pas une redéclaration de i, il n'y avais pas de problème.
    Moi, je me suis base sur le code que tu postes, je ne peux pas deviner que ce n'est pas celui que tu executes. Et oui, le code que tu as posté montre des soucis dans l'utilisation des boucles qui necessitent de revoir les bases, et ce meme si tu connais 75 langages de programmation.

    Regardons ce nouveau code, qui est par ailleurs incomplet, et ne nous permet pas de reproduire ton erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void initTableau(Case tab[][4])
    {
        for(int j=0;j<9;j++)
        {
            for(int i=0;i<5;i++)
            {
                tab[j][i].x = 25;
                tab[j][i].y = 20*i;
                tab[j][i].numCaseL = 20;
                tab[j][i].numCaseC = 20;
            }
        }
    }
    En parametre, tab[][4]. Mais on ne sait pas comment est alloue le tableau dans la fonction appelante : allocation dynamique ou statique ? Est-ce que tu alloues suffisamment d'espace ?
    Si je te demande cela, c'est parceque tu fais iterer i sur 5 valeurs, ce qui risque deja de poser probleme vu que tu definies tab[][4].


    [HS]
    Lorsque je reponds a quelqu'un, je me base sur les elements que l'on me fournit. Toute personne postant le code que tu as poste aurait eu la meme reponse, toi comme mon voisin de boulot comme D. Ritchie.
    En aucun cas ce n'est une remise en cause de tes competences, il nous arrive a tous de faire des erreurs grossieres et de ne pas les voir.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    On peut voir comment tu appelles la fonction initTableau ?
    Et comment tu créé ta Case dans ton main ?

    tab[][4] je trouve ça très bizarre comme écriture.
    Tu as regardé les adresses mémoire des différents tab[i][j].x tab[i][j].y tab[i][j].numCaseL tab[i][j].numCaseC ?
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    tab[][4] je trouve ça très bizarre comme écriture.
    C'est une écriture parfaitement normale pour un tableau 2D dont au moins la seconde dimension est statique.

    Seule la première dimension (ici vide) est ignorée par le compilateur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MasterNico Voir le message
    euhh ...

    certes il y a conflit ... cependant le code que j'ai posté est légèrement moins récent que celui que j'utilise et il ne fonctionne pas non plus ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void initTableau(Case tab[][4])
    {
        for(int j=0;j<9;j++)
        {
            for(int i=0;i<5;i++)
            {
                tab[j][i].x = 25;
                tab[j][i].y = 20*i;
                tab[j][i].numCaseL = 20;
                tab[j][i].numCaseC = 20;
            }
        }
    }
    Bonjour
    Tu as un tableau de 4 éléments et tu tentes d'en remplir 5...

    Citation Envoyé par MasterNico Voir le message
    Je trouve que tu vas vite en besogne en me disant d'aller revoir les boucles ... Je code en six langages différent ... donc je n'ai pas beoins de revoir les boucles ou les structures conditionnelles .
    Ouais ouais t'es un super codeur. Ben retourne alors apprendre à compter combien il y a d'éléments entre 0 et 4 inclus...

    Citation Envoyé par MasterNico Voir le message
    Je partais du principe que si mon compilo (g++) ne me signale pas une redéclaration de i, il n'y avais pas de problème.
    Moi je pars du principe que c'est à moi de réfléchir sans tout laisser gérer mon code par des outils pas forcéments parfaits...

    Citation Envoyé par MasterNico Voir le message
    Citation Envoyé par gangsoleil Voir le message
    Sauf si tu fais des trucs vraiment tordus, je te conseille de reprendre tranquillement les bases des boucles.
    Sa ne méritais tout de même pas un vulgaire "retourne voir le cours sur les boucles débutant"
    Si tu veux citer, fais-le avec honnêteté. gangsoleil ne t'a pas dit "retourne voirs un cours sur les boucles" sur ce ton impératif, il t'a juste conseillé, en ne connaissant de toi que ton exemple de code, de reprendre tranquillement les boucles. Accessoirement si j'avais été toi, j'aurais moi dit "merci" plutôt que monter sur tes grands chevaux en disant "je code en six langages différents"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Il semblerai en effet que je me sois mal comporté ... Je présente mes plus plates excuse en particulier a gangsoleil qui a du suporter en premier ma suffisance. J'essaierais à l'avenir de bien surveiller mes réactions.

    Il est bien évident aussi que je vous remercie ne serai-ce que pour prendre le temps de lire mon code ( dont ce n'est pas la meilleure représentation )

    Je n'ai pas encore tester la solution proposé mais je n'arrive pas à comprendre, dans le cas ou l'erreur serait bien là, pourquoi je n'ai pas d'erreur lorsque je commente ces satanés lignes ... Si cela m'avais levé une erreur, j'aurais vu de suite ma faute et je n'aurais pas fais c**** le monde !

    Encore une fois ma réponse de tout a l'heure était rapide et ne reflète en aucun cas mes pensées profondes mais plutôt un ras-le-bol de la matinée.

    Je teste dans la soirée et je vous dit si le sujet est résolu ...

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MasterNico Voir le message
    Il semblerai en effet que je me sois mal comporté ... Je présente mes plus plates excuse en particulier a gangsoleil qui a du suporter en premier ma suffisance. J'essaierais à l'avenir de bien surveiller mes réactions...
    Encore une fois ma réponse de tout a l'heure était rapide et ne reflète en aucun cas mes pensées profondes mais plutôt un ras-le-bol de la matinée.
    Arf, on a tous nos soucis qui parfois remontent inconsidérément.

    Citation Envoyé par MasterNico Voir le message
    Je n'ai pas encore tester la solution proposé mais je n'arrive pas à comprendre, dans le cas ou l'erreur serait bien là, pourquoi je n'ai pas d'erreur lorsque je commente ces satanés lignes ... Si cela m'avais levé une erreur, j'aurais vu de suite ma faute et je n'aurais pas fais c**** le monde !
    Puisqu'on part tous sur de nouvelles bases, et si en remplaçant 5 par 4 ça ne fonctionne toujours pas, alors pour qu'on puisse t'aider il sera impératif que tu nous montres la définition exacte du tableau avant l'appel à init()...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Tout a l'air de baigner ... Encore merci pour l'aide et désolé pour mon comportement ...

    Quelle erreur de m**** quand j'y pense

  11. #11
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par MasterNico Voir le message
    Quelle erreur de m**** quand j'y pense
    Si on faisait des erreurs intelligentes, ca se saurait !
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/07/2008, 14h29
  2. Problème initialisation tableau code HTML::Parser
    Par stansoad0108 dans le forum Modules
    Réponses: 4
    Dernier message: 20/03/2008, 14h08
  3. [Debutant] Initialisation tableau []
    Par Pumpkins dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 15/09/2004, 00h02
  4. Initialisation tableau
    Par poinclin dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2004, 15h39
  5. [Plugin] Problème initialisation plugin ResourcesPlugin
    Par Michael I. dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 06/02/2004, 13h27

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