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 :

Différence de comportement des exceptions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Différence de comportement des exceptions
    Bonjour,

    J'ai un code compilé avec gcc 4.41 dans lequel j'ai ecrit un control des erreurs via des exceptions de maniére à retrouver le chemin complet de fonction à fonction d'une exception initiale. Mais voila ca fonction bien mais par en 32 bits alors que la version 64bits fonctionne correctement. Ainsi, dans la exemple suivant la fonction qui génére une exception est bien interceptée en 64 bits mais étrangement pas en 32bis. Bon ce n'est pas vraiment clair ce que j'écrit, alors voici un exemple simple ci-dessou.
    En fait je ne comprend pas ce qui peut différent entre les versions 32 et 64 bits.
    Merci de 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    // ma class Exception
       class Exception : public std::exception
       {
          public :
          std::string Message;
     
          Exception(std::string Mes)
          {
            Message=Mes;
          }
          Exception(const char *Mes)
          {
            Message=Mes;
          }
          virtual const char* what() const throw()
          {
            return(Message.c_str());
          }
          virtual ~Exception() throw() {  }
       };
     
     
    // simple exemple
    void fonction_gener_execption()
    {
      throw Exception("Test");
    }
     
    void main()
    {
      try {
         fonction_gener_execption();
      } catch(Exception &e) { 
        // inibition de l'exception
      }
      // en 32 bits le code plante à cause de l'exception alors qu'en 64bits elle est bien interceptée
     
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu comptes modifier l'exception?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } catch(Exception &e) {
    En règle générale, on ne prend une référence non constante que si c'est requis.
    J'imagine que la version suivante devrait résoudre le problème, mais je ne suis pas sûr de savoir expliquer précisément pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } catch(const Exception &e) {
    Bien que ce ne soit pas dans le sujet, préfère l'initialision à la réaffectation dans les constructeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception(std::string Mes) : Message(Mes) {}

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Citation Envoyé par leternel Voir le message
    Bien que ce ne soit pas dans le sujet, préfère l'initialision à la réaffectation dans les constructeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception(std::string Mes) : Message(Mes) {}
    Et même le passer en référence constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception(std::string const& Mes) : Message(Mes) {}
    C'est une bonne habitude à prendre, quelque soit les optimisations faites par le compilateur

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A priori, il n'y a pas d'erreur, et aucune raison que cela ne se passe pas bien.

    Cependant, il faut savoir que la version stable de Gcc est la version 4.7.

    Il n'est pas forcément exclu que ce soit, simplement, un bug de la version 4.41.

    As tu essayé avec une version plus récente?
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Je ne suis pas certain que minGW en soit à la 4.7. Je vais regarder, mais changer de gcc est lourd, il faut que je recompile mes Qt en 32 puis 64 bits sous windows linux et Mac. j'aimerai etre certain que ca vient de ca avant de me lancer là dedans.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    C'est le mingw livré avec le SDK de Qt ?
    Je crois que mingw est en 4.6
    Pour Qt, en général, pas de problème, l'ABI est stable, tu peux (fais des tests) utiliser directement une version plus récente de mingw sans problème

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    J'utilise le tdm-gcc, il en sont au 4.6.1 de gcc je crois.

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    au fait, c'est :

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/07/2014, 16h51
  2. Comportement des exceptions
    Par go_to_debut dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/08/2013, 20h46
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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