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.