2011-10-04 26 views
9

¿Hay alguna manera de permitir la ejecución de un bloque de código incorrecto después de una excepción de lanzamiento?C++, ignora la excepción y continúa el código?

Actualmente, mi código tiene un ciclo while que se ejecuta continuamente. El código dentro de este ciclo while arroja a veces un vector fuera de rango de error. No he podido rastrear la causa de esta excepción en particular, pero en última instancia, no importa mucho porque el código dentro del ciclo while hace lo mismo una y otra vez y la siguiente iteración no depende de la iteración previa en de todas formas.

Esto, después de que el código dentro del ciclo while se cuelgue, me gustaría que comience de nuevo desde la parte superior de la instrucción while.

¿Hay alguna manera de lograr esto en C++? try/catch no parece funcionar en esta situación.

Información adicional: Me gustaría simplemente tomar el código dentro del ciclo while, convertirlo en su propio ejecutable, y poner el ciclo while en un script bash, pero hay algunos datos que cada iteración requiere que permanezcan estáticos y toma demasiado tiempo para volver a la carga que los datos cada vez, así que estoy obligado a hacer mi bucle while en C++

+2

'catch' la excepción en el alcance del ciclo y continuar desde allí. Pero, realmente NECESITA encontrar la causa raíz de su problema. – Chad

+0

¿Puedes publicar algún código para ver ?. try {} catch() {} debe ser estándar si desea una aplicación robusta. – user710502

+0

Las excepciones son excepcionales y deben manejarse. Incluso si no puedes rastrear el problema. – Griwes

Respuesta

12

Sólo tiene que detectar la excepción dentro del bucle while:

while(true) 
{ 
    try 
    { 
      // your code 
    } 
    catch (Exception e) { /* Please, at least do some logging or other error handling here*/ } 
} 
+1

'} catch (std :: out_of_range & exc) {std :: cerr << exc.what(); } ' –

+0

Falta el tipo de excepción en ese' catch'. Sugeriría 'catch (...)' ya que su motivación para atrapar no es un buen diseño. –

+2

¿Es esto una sintaxis válida? Obtengo 'error: expected '(' before '{' token' cuando intento una declaración catch de prueba sin ningún paréntesis después de' catch'. – HelloGoodbye

1

lo primero que debe hacer es depurar el código, para th Probablemente puedas ejecutar el código dentro de un depurador y diagnosticar cuál es el problema. Empujar el problema debajo de la alfombra no hará que desaparezca, y el programa seguirá sin funcionar.

Si por el contrario, el problema es con algo que es realmente excepcional pero factible (considerar la apertura de un archivo, enviar un paquete por la red, todo aquello susceptible de fallar, pero no se espera que --como en comparación con algo que debería nunca ocurrir), el enfoque try/catch debería funcionar.

0

si pudiera publicar un fragmento de código, todos podríamos ayudarlo más. pero en general siempre se debe tener algún tipo de manejar ya sea un try catch {} {} o simplemente comprobando una variable como error:

while(true) 
{ 

if(flag == "Error") 
{ 
//error handle 
} 

else 
{ 
//continue with code execution 
} 

} 

Esperanza usted consigue este problema resuelto!

Cuestiones relacionadas