C++ std::bad_alloc Excepción
Este breve artículo analiza la causa principal de la excepción std::bad_alloc()
en C++. También analiza el método para abordar sin problemas esta excepción en tiempo de ejecución mediante el manejo de excepciones de C++.
Manejo de excepciones en C++
Todas las excepciones derivan de la clase std::exception
. Es un error de tiempo de ejecución que se puede arreglar.
Si no tratamos con la excepción, el programa imprimirá un mensaje de falla y terminará. El control de ejecución se puede transferir de una parte de un programa a otra, gracias a las excepciones.
C++ utiliza las tres palabras clave intentar
, atrapar
y lanzar
para tratar las excepciones.
Palabra clave | Descripción |
---|---|
throw |
Nosotros lanzamos una excepción usando la palabra clave lanzar y definimos el tipo de excepción que puede surgir si hay una parte de su código que tiene el potencial de causar un problema. |
try |
El segmento de código que puede crear un error y tiene que lanzar una excepción está contenido en el bloque try. |
catch |
El bloque llamado cuando se lanza una excepción se conoce como bloque catch. Si es necesario, podemos detener la aplicación mediante programación y notificar al usuario del error en este bloque de código. |
la excepción std::bad_alloc
en C++
Cada vez que intentamos crear un objeto usando una palabra clave nueva
, el compilador solicita la memoria en el montón. Si la cantidad de memoria requerida no está disponible en el montón, se lanza una excepción, conocida como la excepción std::bad_alloc
.
Si declara un solo objeto utilizando la palabra clave nuevo
o una matriz dinámica, se lanzará una excepción en tiempo de ejecución si la memoria requerida no está disponible.
Veamos el siguiente ejemplo para manejar la excepción bad_alloc
.
Código de ejemplo:
#include <iostream>
#include <new>
int main() {
try {
int* newarr = new int[2000000000];
} catch (std::bad_alloc& all) {
std::cerr << "bad_alloc exception occurred: " << all.what() << '\n';
}
return 0;
}
Producción :
bad_alloc exception occurred: std::bad_alloc
Si no encerramos este código en un bloque try-catch
, probablemente nuestro programa colapsará. Para evitar tales situaciones, siempre debemos manejar esta excepción para que el programa pueda terminarse normalmente informando al usuario sobre el error.