C++ std::bad_alloc Excepción

Naila Saad Siddiqui 12 octubre 2023
  1. Manejo de excepciones en C++
  2. la excepción std::bad_alloc en C++
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.

Artículo relacionado - C++ Error