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 :

pile corrompue dès le lancement du programme


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut pile corrompue dès le lancement du programme
    Bonjour,

    Je travaille sous linux avec g++. J'utilise des bibliothèques qui m'imposent de compiler avec g++-3.3 (en utilisant la v4 j'ai plein de problèmes de liens, ça ne doit pas utiliser la même libstdc++ que les susdites bibliothèques).

    Avec la v3 la compilation et les liens passent bien, mais ça plante à l'exécution. Voici la pile d'appels sortie par gdb :

    #0 0xb7d337a7 in raise () from /lib/tls/libc.so.6
    #1 0xb7d3504b in abort () from /lib/tls/libc.so.6
    #2 0xb7f03da7 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.5
    #3 0xb7f03de4 in std::terminate () from /usr/lib/libstdc++.so.5
    #4 0xb7f03fbc in __cxa_rethrow () from /usr/lib/libstdc++.so.5
    #5 0x0808fac6 in cplex (this=0xbfb5d980, p=@0x8747448, sols=@0x0) at cplex.tpp:25
    #6 0x0808edc2 in solve (p=@0x0, save=false) at code/main.cpp:65
    #7 0x0808eead in read_and_solve (is=@0x0, save=false) at code/main.cpp:82
    #8 0x0808f6cd in main (argc=0, argv=0x0) at code/main.cpp:141
    Mon programme prend un argument, donc je suis étonné des valeurs des paramètres de la fonction main(). De même, le paramètre is de read_and_solve() est un std::ifstream alloué sur la pile, il ne devrait pas être NULL.

    Je ne sais pas vers où me diriger, auriez-vous des conseils ?

    merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Exécution pas à pas depuis le départ et vérification à chaque étape de la validité des arguments et de la pile, la meilleure solution, sans doute.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut
    ça s'annonce mal, je mets un point d'arrêt dès le début, et ça donne ça :

    Breakpoint 1, main (argc=-1079403884, argv=0xbfa99a94) at code/main.cpp:131
    131 {
    Notez la valeur de argc. Pour info, le code du main est
    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
    int main(int argc, char* argv[])
    {
      config cfg;
     
      if ( parse_args( argc, argv, cfg ) )
        {
          if ( cfg.file_name == NULL )
            read_and_solve( std::cin, cfg.save );
          else
            {
              std::ifstream f(cfg.file_name);
              read_and_solve( f, cfg.save );
              f.close();
            }
     
          return 0;
        }
      else
        return 1;
    } // main
    Je continue dans le prog avec des step :
    (gdb) step
    134 if ( parse_args( argc, argv, cfg ) )
    (gdb) step
    131 {
    Vous avez vu ? au lieu d'entrer dans la méthode parse_args(), on est à nouveau à l'entrée du main.

    Ca arrive trois fois, ensuite la méthode est vraiment appelée et argc se retrouve avec la bonne valeur.

    Je n'y comprends pas grand chose.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Je pense que tu devrais chercher l'erreur ailleurs : problème de link, de version de lib, ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Je pense que tu devrais chercher l'erreur ailleurs : problème de link, de version de lib, ...
    Ouaip, ça vient d'une des bibliothèques. Une des deux que je suis obligé de mettre simultanément.

    Pour une raison que j'ignore, les exemples fournis avec les bibliothèques fonctionnent très bien. Je vais me pencher là dessus.

    Merci

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

Discussions similaires

  1. [TP7] Problème de lancement du programme
    Par i_smiler dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 30/04/2006, 08h52
  2. Créer un object au premier lancement du programme ?
    Par david06600 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2006, 13h04
  3. Réponses: 1
    Dernier message: 01/12/2005, 00h14
  4. Delphi 2005 Indy 9 Erreur au lancement du programme
    Par Houben Jacques dans le forum Web & réseau
    Réponses: 4
    Dernier message: 08/11/2005, 13h05
  5. [DCOM] Accès refusé au lancement du programme à distance
    Par raoulmania dans le forum Web & réseau
    Réponses: 7
    Dernier message: 22/06/2005, 14h01

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