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++Builder Discussion :

Probleme de gestion des exceptions


Sujet :

C++Builder

  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 Probleme de gestion des exceptions
    Bonjour,
    J'ai un petit souci avec les exceptions
    J'utilise la syntax suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void myfunction()
      //declarations
      try {
         field=new double[nn];
        // traitement
        // traitement
        // traitement
      } catch(Exception &e) {
        throw Exception(e.Message+"\Erreur dans myfunction) 
      }
    }
    La plupart des erreurs sont bien catché, mais pour une erreur d'allocation (new) le catch ne la voie pas passer.
    Comment puis-je m'y prendre
    merci d'avance

  2. #2
    Membre éclairé
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Points : 786
    Points
    786
    Par défaut
    Salut !

    En consultant l'aide de C++Builder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Les opérateurs new permettent une allocation dynamique de la mémoire,
     similaire mais plus puissant que la fonction standard malloc. Ces fonctions
     d'allocation essaient d'allouer taille octets de stockage. En cas de réussite,
     new renvoie un pointeur vers la mémoire allouée. En cas d'échec de
     l'allocation, l'opérateur new appelle la fonction new_handler. Par défaut,
     new_handler déclenche une exception de type bad_alloc. Si vous ne
     souhaitez pas qu'une exception soit déclenchée, utilisez la version nothrow
     de operator new. Les versions nothrow renvoient un résultat de pointeur
     NULL en cas d'échec, au lieu de déclencher une exception.
    Un exmple :

    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
     
     
    #include <new>
     
    int main(int argc, char* argv[])
    {
       int *pn;
     
            // la version nothrow renvoie un pointeur NULL au lieu de déclencher une
            // exception bad_alloc.
            pn = new(nothrow) int[5000000];
            if(pn != NULL) {
              // Allocation réussie.
            }
     
            return 0;
     
    }
    Peut être une solution


    Bonne continuation !

  3. #3
    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
    Merci beaucoup pour ta réponse. Oui ca va résoudre mon petit souci. Ceci dit pour l'exception bad_alloc n'est pas intercepté par mon catch?

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    uriotcea a ecrit:
    Bonjour,
    J'ai un petit souci avec les exceptions
    J'ai trouve ceci dans "throwing exceptions,".
    L'aide en ligne donne une utilisation de THROW differente de la tienne.
    The try block contains a statement or statements that can throw an exception. A program throws an exception by executing a throw statement. The throw statement generally occurs within a function. For example:

    void SetFieldValue(DF *dataField, int userValue)

    {
    if ((userValue < 0) || userValue > 10)
    throw EIntegerRange(0, 10, userValue);
    . . .
    }

    Another part of the program can catch the thrown exception object and handle it accordingly. For example:

    try

    {
    SetFieldValue(dataField, userValue);
    }
    catch (EIntegerRange &rangeErr)
    {
    printf("Expected value between %d and %d, but got %d\n",
    rangeErr.min, rangeErr.max, rangeErr.value);
    }

    In the previous example, if the function SetFieldValue finds that its input parameters are invalid, it can throw an exception to indicate this. The try/catch block wrapping SetFieldValue to catch the exception that SetFieldValue throws, and executes the printf statement. If no exception is thrown, the printf statement will not be executed.
    A try block specified by try must be followed immediately by the handler specified by catch. The try block is a statement that specifies the flow of control as the program executes. If an exception is thrown in the try block, program control is transferred to the appropriate exception handler.

    The handler is a block of code designed to handle the exception. The C++ language requires at least one handler immediately after a try block. The program should include a handler for each exception that the program can generate.
    en esperant t'aider.

Discussions similaires

  1. Probleme Gestion des exception v2000
    Par Badtothebone93 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 21/04/2009, 13h35
  2. [PL/SQL] gestion des exceptions - probleme
    Par etoileDesNeiges dans le forum Administration
    Réponses: 6
    Dernier message: 11/01/2007, 17h13
  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