OVH Cloud OVH Cloud

Interception d'une exception

3 réponses
Avatar
Jmr
Bonjour,
Concernant le fonctionnement des exceptions, je me pose la question suivante
:
Supposons une fonction de ce style :

void fonc1 ()
{
float * p ;
p = new float ;
.
}

une autre fonction qui appelle fonc1

void fonc2 ()
{
fonc1() ;
.
}

Peut on intercepter une éventuelle CMemoryException qui se serait produite
(échec de new) dans fonc1 dans le cas suivant :

void fonc3()
{
try // Interception d'une exception qui se serait
produite dans fonc1 ?
{
fonc2() ;
}

catch (CMemoryException)
{
.
throw ;
}
}

Ou doit-on intercepter l'exception dans fonc1 pour la relancer ainsi que
dans fonc2 ?

Par avance merci.

3 réponses

Avatar
Anthony
Bonjour,
Concernant le fonctionnement des exceptions, je me pose la question
suivante

:
Supposons une fonction de ce style :

void fonc1 ()
{
float * p ;
p = new float ;
.
}

une autre fonction qui appelle fonc1

void fonc2 ()
{
fonc1() ;
.
}

Peut on intercepter une éventuelle CMemoryException qui se serait produite
(échec de new) dans fonc1 dans le cas suivant :

void fonc3()
{
try // Interception d'une exception qui se serait
produite dans fonc1 ?
{
fonc2() ;
}

catch (CMemoryException)
{
.
throw ;
}
}

Ou doit-on intercepter l'exception dans fonc1 pour la relancer ainsi que
dans fonc2 ?



Salut,
En fait, tu peux intercepter ton exception n'importe où, même dans main()
par exemple.
Quand une exception est levée par une fonction, la pile d'execution de ton
programme sera remontée, jusqu'à trouver un gestionnaire de l'exception dans
les diverses fonctions appelantes.
Si aucun gestionnaire n'est trouvé, le programme se finit.

Par contre, pour ton information, CMemoryException n'est pas une exception
standard mais fait partie des MFC à ma connaissance. new en toute logique
lève une exception std::bad_alloc si elle échoue.

--
Anthony

Avatar
Jmr
Merci !
"Anthony" a écrit dans le message de
news:bk2abl$p7b$
Bonjour,
Concernant le fonctionnement des exceptions, je me pose la question
suivante

:
Supposons une fonction de ce style :

void fonc1 ()
{
float * p ;
p = new float ;
.
}

une autre fonction qui appelle fonc1

void fonc2 ()
{
fonc1() ;
.
}

Peut on intercepter une éventuelle CMemoryException qui se serait
produite


(échec de new) dans fonc1 dans le cas suivant :

void fonc3()
{
try // Interception d'une exception qui se serait
produite dans fonc1 ?
{
fonc2() ;
}

catch (CMemoryException)
{
.
throw ;
}
}

Ou doit-on intercepter l'exception dans fonc1 pour la relancer ainsi que
dans fonc2 ?



Salut,
En fait, tu peux intercepter ton exception n'importe où, même dans main()
par exemple.
Quand une exception est levée par une fonction, la pile d'execution de ton
programme sera remontée, jusqu'à trouver un gestionnaire de l'exception
dans

les diverses fonctions appelantes.
Si aucun gestionnaire n'est trouvé, le programme se finit.

Par contre, pour ton information, CMemoryException n'est pas une exception
standard mais fait partie des MFC à ma connaissance. new en toute logique
lève une exception std::bad_alloc si elle échoue.

--
Anthony





Avatar
Fabien LE LEZ
On Sun, 14 Sep 2003 20:22:44 +0200, "Jmr" wrote:

Merci !
"Anthony" a écrit dans le message de


A lire d'urgence avant de continuer ta découverte d'Usenet :
<http://www.giromini.org/usenet-fr/repondre.html>