<div dir="ltr">Hola Camilo José,<div class="gmail_extra"><br></div><div class="gmail_extra">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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">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á.</div><div class="gmail_extra"><br></div><div class="gmail_extra">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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Espero que esto aclare las dudas.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Steven</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-23 15:22 GMT-04:00 Camilo José <span dir="ltr"><<a href="mailto:cjdelreal2009@gmail.com" target="_blank">cjdelreal2009@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Tengo el urgente problema de que no se me capturan las excepciones. Sea<br>
<br>
try<br>
{<br>
    *(int*)0 = 0;<br>
}<br>
catch(exception ex)<br>
{<br>
    cout << "Excepcion" << endl;<br>
}<br>
<br>
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:<br>
catch(...)<br>
catch(const exception& ex)<br>
catch(const std::exception& ex)<br>
pero na, y necesito que me haga capturas globales.<br>
Si alguien me puede dar luz sobre al asunto le estare muy agradecido.</blockquote></div></div></div>