C++ std::bad_alloc 예외

Naila Saad Siddiqui 2023년10월12일
  1. C++의 예외 처리
  2. C++의 std::bad_alloc 예외
C++ std::bad_alloc 예외

이 짧은 기사에서는 C++에서 std::bad_alloc() 예외의 주요 원인에 대해 설명합니다. 또한 C++ 예외 처리를 사용하여 이 런타임 예외를 원활하게 처리하는 방법에 대해서도 설명합니다.

C++의 예외 처리

모든 예외는 std::exception 클래스에서 파생됩니다. 고칠 수 있는 런타임 오류입니다.

예외를 처리하지 않으면 프로그램은 실패 메시지를 출력하고 종료됩니다. 실행 제어는 예외 덕분에 프로그램의 한 부분에서 다른 부분으로 이전될 수 있습니다.

C++는 세 가지 키워드 try, catchthrow를 사용하여 예외를 처리합니다.

예어 설명
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 블록으로 묶지 않으면 프로그램이 중단될 수 있습니다. 이러한 상황을 피하기 위해서는 사용자에게 오류를 알려 프로그램이 정상적으로 종료될 수 있도록 항상 이 예외를 처리해야 합니다.

관련 문장 - C++ Error