C++ std::bad_alloc 예외
Naila Saad Siddiqui
2023년10월12일
이 짧은 기사에서는 C++에서 std::bad_alloc()
예외의 주요 원인에 대해 설명합니다. 또한 C++ 예외 처리를 사용하여 이 런타임 예외를 원활하게 처리하는 방법에 대해서도 설명합니다.
C++의 예외 처리
모든 예외는 std::exception
클래스에서 파생됩니다. 고칠 수 있는 런타임 오류입니다.
예외를 처리하지 않으면 프로그램은 실패 메시지를 출력하고 종료됩니다. 실행 제어는 예외 덕분에 프로그램의 한 부분에서 다른 부분으로 이전될 수 있습니다.
C++는 세 가지 키워드 try
, catch
및 throw
를 사용하여 예외를 처리합니다.
예어 | 설명 |
---|---|
throw |
우리는 throw 키워드를 사용하여 예외를 throw하고 문제를 일으킬 가능성이 있는 코드 부분이 있는 경우 발생할 수 있는 예외의 종류를 정의합니다. |
try |
오류를 생성할 수 있고 예외를 발생시켜야 하는 코드 세그먼트는 try 블록에 포함되어 있습니다. |
catch |
예외가 발생했을 때 호출되는 블록을 catch 블록이라고 합니다. 필요한 경우 프로그래밍 방식으로 응용 프로그램을 중지하고 이 코드 블록의 실수를 사용자에게 알릴 수 있습니다. |
C++의 std::bad_alloc
예외
new
키워드를 사용하여 개체를 만들려고 할 때마다 컴파일러는 힙의 메모리를 요청합니다. 필요한 양의 메모리를 힙에서 사용할 수 없는 경우 std::bad_alloc
예외라는 예외가 발생합니다.
new
키워드 또는 동적 배열을 사용하여 단일 개체를 선언하는 경우 필요한 메모리를 사용할 수 없는 경우 런타임에 예외가 발생합니다.
bad_alloc
예외를 처리하기 위해 아래 예제를 살펴보겠습니다.
예제 코드:
#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;
}
출력:
bad_alloc exception occurred: std::bad_alloc
이 코드를 try-catch
블록으로 묶지 않으면 프로그램이 중단될 수 있습니다. 이러한 상황을 피하기 위해서는 사용자에게 오류를 알려 프로그램이 정상적으로 종료될 수 있도록 항상 이 예외를 처리해야 합니다.