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 :

Exception non intercepté


Sujet :

C++

  1. #1
    Membre averti 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
    Points : 444
    Points
    444
    Par défaut Exception non intercepté
    Bonjour,
    Avez-vous une idée pourqoui le bout de code ci-dessous produit un plantage alors que je m'aurais attendu à catcher l'exception produite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      try {
         int b,N=10.3,n=0;
         b=N/n;
         printf("%d",b);
      } catch(...) {
        printf("Erreur catched");
      }
    Merci d'avance de votre aide

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Une division par zéro ne lève pas une exception C++. C'est une opération arithmétique, le processeur ne fera pas un throw pour toi, il n'est pas censé exécuter que du code C++. Tu dois donc t'assurer que le dénominateur n'est pas nul avant de faire une division et dans le cas contraire, tu lèves une exception. Sinon, tu peux être notifiée d'une exception flottante (qui peut être une division par zéro) en interceptant le signal SIGFPE. La bonne méthode à mon avis c'est de toujours tester le dénominateur.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    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 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Melem Voir le message
    Une division par zéro ne lève pas une exception C++.
    C'est l'occasion de rappeler qu'une exception systeme de type SEH sous Windows n'est pas une exception C++. La division par zero leve une SEH sous Windows, et c'est au moyen des mots-cles SEH qu'il faut la gerer (__try...__except). C'est un mecanisme "parallele" aux exceptions C++.

  4. #4
    Membre averti 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
    Points : 444
    Points
    444
    Par défaut
    Ok, mais alors quelle genre d'exception au just est géré par le C++?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    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 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Les exceptions C++
    Une exeption C++ standard est levee via throw. Une excetion SEH est levee par Windows, avec un mecanisme "a part" => le SEH (les SEH peuvent etre catchee dans d'autres langages).
    Le truc c'est que VC++ s'appuie sur les SEH pour implementer ses exceptions C++... Mais c'est un detail d'implementation qu'il vaut mieux ne pas savoir, car vouloir en profiter est source de problemes.

  6. #6
    Membre averti 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
    Points : 444
    Points
    444
    Par défaut
    Ok, merci pour tes indications

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

Discussions similaires

  1. Exception non interceptée
    Par valda117 dans le forum PL/SQL
    Réponses: 0
    Dernier message: 28/08/2014, 22h43
  2. Réponses: 4
    Dernier message: 26/05/2011, 17h56
  3. Interception d'exceptions non traitées
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 20/04/2009, 14h24
  4. Réponses: 4
    Dernier message: 14/02/2005, 19h41

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