[C con Clase] Problema con excepciones

Davidson, Steven srd4121 en njit.edu
Vie Abr 24 21:23:51 CEST 2015


Hola Camilo José,

En primer lugar, en el contexto del sistema de excepciones, una excepción
no es un error. Se trata de una situación excepcional; es decir, no debería
suceder, pero hay casos raros que pueda dar lugar a un problema. La otra
propiedad de una excepción es que el programa se puede recuperar de tal
caso excepcional.

Dicho lo anterior, la violación de acceso o a veces "fallo de segmentación"
es un error del procesador o posiblemente del sistema operativo, y por
tanto se produce durante el tiempo de ejecución. El sistema de excepciones
se basa en casos excepcionales producidos por el propio programa.
Técnicamente, una excepción debe ser lanzada para que el mecanismo funcione
correctamente mediante el bloque de 'try/catch'. En tu caso, el error no
produce una excepción, porque no se lanza una, y por tanto, 'try/catch' no
funcionará.

La solución es usar el sistema de señales, en particular la señal
'SIGSEGV'. Puedes crear tu propia función gerente u operaria para gestionar
la señal y regístrala con 'signal()'. Podrías encapsular este procedimiento
en una clase para lanzar una excepción; y así puedes usar el sistema de
excepciones y el bloque 'try/catch'. Sin embargo, ten presente que un fallo
de segmentación o violación de acceso ya implica un caso general
irreversible, por lo que el programa no se puede recuperar de ello.

Espero que esto aclare las dudas.

Steven


2015-04-23 15:22 GMT-04:00 Camilo José <cjdelreal2009 en gmail.com>:

> Tengo el urgente problema de que no se me capturan las excepciones. Sea
>
> try
> {
>     *(int*)0 = 0;
> }
> catch(exception ex)
> {
>     cout << "Excepcion" << endl;
> }
>
> la sentencia *(int*)0 = 0 debe lanzar una excepcion de violacion de
> acceso, lo cual hace correctamente, pero el bloque try no la captura. He
> probado con:
> catch(...)
> catch(const exception& ex)
> catch(const std::exception& ex)
> pero na, y necesito que me haga capturas globales.
> Si alguien me puede dar luz sobre al asunto le estare muy agradecido.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150424/dcfe9a0b/attachment.html>


Más información sobre la lista de distribución Cconclase