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 :

"Call Stack" trouvé pendant un débugage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut "Call Stack" trouvé pendant un débugage
    Bonjour,

    J'ai voulu raccourci un morceau de code qui ressemblait en gros a sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(c[63]==longchaine) { c[62]++; c[63]=0; }
    if(c[62]==longchaine) { c[61]++; c[62]=0; }
    ...
    if(c[2]==longchaine) { c[1]++; c[2]=0; }
    if(c[1]==longchaine) { c[1] = 0; }
    (Je tiens a préciser qu'avec ce morceau de code ci-dessus mon programme fonctionne parfaitement)

    Par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    while(continuer2==0)
    {
        if(c[i]==longchaine)
        {
            c[i]=0;
            c[i-1]++;
        }
        i--;
        if(i==1)
        {
            if(c[1]==longchaine) { c[1] = 0; }
            continuer2=1;
         }
    }
    (C'est donc ce morceau qui créer un bug, et pourtant...(voir la suite))

    Cependant mon programme plante après un moment d'exécution. Je lance donc le Debug sur Code::Blocks et il me trouve un "Call Stack", je vous copie/colle le détail :

    #0 00401580 creation(nomchaine=0x22fdcd "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", longchaine=36) (C:\Chemin_vers_programme\main.cpp:52)
    #1 00401D9B main() (C:\Chemin_vers_programme\main.cpp:216)
    L'endroit de la ligne 52 (pour le 1er Call Stack) correspond a ce morceau de code qui est dans ma fonction "void creation(char *nomchaine, int long chaine)" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(f6<=f5)
    {
        fputc(nomchaine[c[f6]], fichier);
        f6++;
    }
    L'endroit de la ligne 216 (pour le 2e Call Stack), dans le main, correspond a l'appel de ma fonction "creation".

    Le bug ne provient donc pas du nouveau morceau de code, mais c'est a cause de lui que le bug apparaît...

    Quelqu'un aurait une idée d'où peut venir le problème svp ?

    Cordialement,

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense qu'il va falloir montrer plus de code que ça.
    Y compris l'initialisation de i, le contenu de tes variables f5 et f6...
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    f5 contient la taille de la chaîne qui sera écrite dans mon fichier
    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
    void creation(char *nomchaine, int longchaine)
    {
         int c[63] = {0};
         int f5;
         int f6;
         int i = 63;
         char retour = '\n';
     
         f6 = 1;    
         while(f6<=f5)
         {
             fputc(nomchaine[c[f6]], fichier); //Ligne qui pose problème quand nouveau morceau de code implanter
             f6++;
         }
         fputc(retour, fichier);
     
         c[f5]++;
     
         i=63; //Début nouveau morceau de code
         while(continuer2==0) 
         {
             if(c[i]==longchaine)
             {
                 c[i]=0;
                 c[i-1]++;
             }
             i--;
             if(i==1)
             {
                 if(c[1]==longchaine) { c[1] = 0; }
                 continuer2=1;
             }
         } //Fin nouveau morceau code
    }
    int main()
    {
        char un[] = {*plein de caractères*,'\0'};
        char deux[] = {*plein de caractères*,'\0'};
        char trois[] = {*plein de caractères*,'\0'};
        char quatre[] = {*plein de caractères*,'\0'};
        int menu = 0;
        cin >> menu;
     
        if(menu==1) { creation(un,166); }
        else if(menu==2) { creation(deux,62); }
        else if(menu==3) { creation(trois,36); }
        else if(menu==4) { creation(quatre,36); }
        return 0;
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    J'ai aussi sa dans le debug :
    Program received signal SIGSEGV, Segmentation fault.
    At C:\Chemin_vers_fichier\main.cpp:52
    Et a la ligne 52 c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputc(nomchaine[c[f6]], fichier);
    Donc le problème viendrait de mon pointeur "char *nomchaine" dans "void creation(char *nomchaine, int longchaine);"

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    c[63] n'est pas une expression valide.
    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.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Pourtant c'est dans un autre topic sur ce forum (http://www.developpez.net/forums/d13...s/#post7333757) que l'on m'a dit que cela était possible.
    Et c'est ceci qui raccourci la déclaration des mes 63 variables.

    Par quoi je pourrai le remplacer dans ce cas ?

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

Discussions similaires

  1. Obtenir call stack d'un programme java/C++ ?
    Par SteelBox dans le forum Linux
    Réponses: 22
    Dernier message: 26/11/2006, 20h16
  2. [Visual 2005]call stack
    Par ep31 dans le forum Visual C++
    Réponses: 3
    Dernier message: 19/09/2006, 16h16

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