C++ std::bad_alloc-Ausnahme

Naila Saad Siddiqui 12 Oktober 2023
  1. Ausnahmebehandlung in C++
  2. die std::bad_alloc-Ausnahme in C++
C++ std::bad_alloc-Ausnahme

Dieser kurze Artikel behandelt die Hauptursache der Ausnahme std::bad_alloc() in C++. Außerdem wird die Methode zum reibungslosen Bewältigen dieser Laufzeitausnahme mithilfe der C++-Ausnahmebehandlung erläutert.

Ausnahmebehandlung in C++

Alle Ausnahmen stammen von der Klasse std::exception. Es ist ein Laufzeitfehler, der behoben werden kann.

Wenn wir die Ausnahme nicht behandeln, gibt das Programm eine Fehlermeldung aus und beendet sich. Die Ablaufkontrolle kann von einem Teil eines Programms auf einen anderen übertragen werden - dank Ausnahmen.

C++ verwendet die drei Schlüsselwörter try, catch und throw, um mit Ausnahmen umzugehen.

Stichwort Beschreibung
throw Wir werfen eine Ausnahme mit dem Schlüsselwort throw und definieren die Art der Ausnahme, die auftreten kann, wenn ein Teil Ihres Codes das Potenzial hat, ein Problem zu verursachen.
try Das Codesegment, das einen Fehler erzeugen kann und eine Ausnahme auslösen muss, ist im try-Block enthalten.
catch Der Block, der aufgerufen wird, wenn eine Ausnahme ausgelöst wird, wird als Catch-Block bezeichnet. Bei Bedarf können wir die Anwendung programmgesteuert stoppen und den Benutzer über den Fehler in diesem Codeblock informieren.

die std::bad_alloc-Ausnahme in C++

Immer wenn wir versuchen, ein Objekt mit dem Schlüsselwort new zu erstellen, fordert der Compiler den Speicher auf dem Heap an. Wenn die erforderliche Menge an Speicher auf dem Heap nicht verfügbar ist, wird eine Ausnahme ausgelöst, die als std::bad_alloc-Ausnahme bekannt ist.

Wenn Sie ein einzelnes Objekt mit dem Schlüsselwort new oder einem dynamischen Array deklarieren, wird zur Laufzeit eine Ausnahme ausgelöst, wenn der erforderliche Speicher nicht verfügbar ist.

Schauen wir uns das folgende Beispiel an, um die Ausnahme bad_alloc zu behandeln.

Beispielcode:

#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;
}

Ausgang:

bad_alloc exception occurred: std::bad_alloc

Wenn wir diesen Code nicht in einen try-catch-Block einschließen, wird dies wahrscheinlich unser Programm zum Absturz bringen. Um solche Situationen zu vermeiden, sollten wir diese Ausnahme immer behandeln, damit das Programm normal beendet werden kann, indem der Benutzer über den Fehler informiert wird.

Verwandter Artikel - C++ Error