Solución:
Mientras tu pueden llama exit()
(y es posible que deba hacerlo si su aplicación encuentra algún error fatal), la forma más limpia de salir de un programa es regresar de main()
:
int main()
{
// do whatever your program does
} // function returns and exits program
Cuando usted llama exit()
, los objetos con duración de almacenamiento automático (variables locales) no se destruyen antes de que finalice el programa, por lo que no se realiza una limpieza adecuada. Es posible que esos objetos necesiten limpiar los recursos que poseen, conservar los cambios de estado pendientes, terminar los subprocesos en ejecución o realizar otras acciones para que el programa finalice sin problemas.
#include <cstdlib>
...
exit( exit_code );
Hay varias formas de hacer que su programa finalice. Cuál es el apropiado depende de por qué desea que finalice su programa. La gran mayoría de las veces debería ser ejecutando una declaración de retorno en su función principal. Como en el siguiente.
int main()
{
f();
return 0;
}
Como otros han identificado, esto permite que todas las variables de su pila se destruyan correctamente para limpiarlas correctamente. Esto es muy importante.
Si ha detectado un error en algún lugar profundo de su código y necesita salir, debe lanzar una excepción para volver a la función principal. Como en el siguiente.
struct stop_now_t { };
void f()
{
// ...
if (some_condition())
throw stop_now_t();
// ...
}
int main()
{
try {
f();
} catch (stop_now_t& stop) {
return 1;
}
return 0;
}
Esto hace que la pila se desenrolle y todas las variables de su pila se destruyan. Sigue siendo muy importante. Tenga en cuenta que es apropiado indicar la falla con un valor de retorno distinto de cero.
Si en el improbable caso de que su programa detecte una condición que indique que ya no es seguro ejecutar más declaraciones, entonces debe usar std :: abort (). Esto hará que su programa se detenga repentinamente sin más procesamiento. std :: exit () es similar pero puede llamar a los manejadores atexit, lo que podría ser malo si su programa está lo suficientemente borked.