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 lors de l'exécution


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 11
    Points : 20
    Points
    20
    Par défaut Problème lors de l'exécution
    Bonsoir,

    J'ai un petit soucis avec un programme que j'ai fait; je veux créer une arbre dont la taille n'est pas fixe (selon les zéros d'un tableau que contient le nœud parent)

    Alors je fais une itération de 1 à nombre_de_zeros, à chaque itération je fais une allocation (voir ci-dessous la classe et la fonction qui fait le job). Le problème c'est que lorsque je fais le test de la fonction " void config::niveau_suivant() " l'exécutable est bloqué.
    Je pense qu'il y a un problème avec la méthode utilisée (surtout que je débute avec C++).

    Merci d'avance pour votre aide

    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
    class config
    {
        int vcoups[9];
        config *fille;
        config *soeur;
     
    public:
        config(){for(int i=0;i<9;i++) vcoups[i]=0;fille=NULL;soeur=NULL;valeur=-1000;}
        config(const config& C){for(int i=0;i<9;i++) vcoups[i]=C.vcoups[i];fille=NULL;soeur=NULL;valeur=C.valeur;}
        config *Fille(){return fille;}
        config *Soeur(){return soeur;}
        int Vcoups(int i)const {return vcoups[i-1];}
        int & Vcoups(int i) {return vcoups[i-1];}
        void niveau_suivant();
     
    };
    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
    void config::niveau_suivant()//creer les configurations du niveau suivant, des vecteur qui ont initialement les memes cases de la mere
    {
        int i=0,j;
        for(j=0;j<9;j++) if(Vcoups(i)==0) i++;//nombre de coups possibles
        if (i!=0)
        {
            fille=new config;
            fille->Valeur()=111;
            config *p=fille;
            for(j=1;j<i;j++)
            {
                p->soeur=new config;
                p=p->soeur;
            }
     
        }
    }

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Est-ce que dans chaque config tu appelles la methode niveau_suivant() ? Si oui le probleme vient du fait que tu recrees en boucle une classe config qui va appeler niveau_suivant(). Si non, le probleme doit venir d'ailleurs, en tout cas je n'ai rien vu qui puisse creer une boucle infinie...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 11
    Points : 20
    Points
    20
    Par défaut
    Je pense j'ai trouvé le problème, je cite :
    Lorsqu'un objet est alloué dynamiquement, au moins un pointeur doit pointer sur lui: sinon, le lien évoqué ci-dessus est brisé, et l'objet est inutilisable. On peut dire qu'il est perdu, mais surtout la mémoire correspondante est perdue. Avant de briser le lien, il aurait fallu rendre la mémoire au système. Suivant les cas de figure, cela peut être grave ou pas. Par exemple, si l'allocation de mémoire a lieu dans une boucle, à chaque itération de la boucle on perd un peu de mémoire... d'oû l'expressoin fuite de mémoire. Si le nombre d'itérations est important, il y a un moment oû le système refusera de donner de la mémoire supplémentaire au programme, et celui-ci sera interrompu brutalement.
    SI c'est le cas comment le résoudre?

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    2 solutions :

    - smart pointer
    - coder proprement (exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char *c = new char[125];
    c = 0; //pas bien !
    /* ou */
    c = new char[48]; //pas bien !
    /* ou */
    delete[] c; //bien !
    Un new = un delete en gros (c'est bizarre dit en C++ ).)

Discussions similaires

  1. Problème lors de l'exécution du code
    Par souminet dans le forum Bases de données
    Réponses: 7
    Dernier message: 11/12/2007, 22h15
  2. Réponses: 10
    Dernier message: 30/01/2007, 09h29
  3. [Procédure] problème lors de l'exécution
    Par pinocchio dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/10/2006, 14h23
  4. Problème lors de l'exécution d'un trigger
    Par Madoka dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 30/06/2006, 08h33
  5. Problème lors de l'exécution de mes programmes
    Par darkmalak01 dans le forum Langage
    Réponses: 7
    Dernier message: 27/09/2005, 18h35

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