[C++] メモリ確保エラーをキャッチする方法

2 min read

方法

1. std::bad_alloc

try {
  unsigned char* buffer = new unsigned char[size + 1];
} catch (const std::bad_alloc& e) {
  std::cerr << "std::bad_alloc caught: " << e.what() << '\n';
}
  1. new 演算子を使用して、size + 1 バイトの領域を割り当て、その先頭アドレスを buffer ポインタに格納する。
  2. new 演算子が失敗し、std::bad_alloc 例外がスローされた場合、catch ブロックが実行される。
  3. 例外オブジェクトの説明を取得し、エラーメッセージを表示する。

2. GetLastError

GetLastErrorは、Windows プラットフォーム上でのみ使用できる。

try {
  unsigned char* buffer = new unsigned char[size + 1];
} catch (...) {
  int err = GetLastError();
  if (ERROR_NOT_ENOUGH_MEMORY == err) {
    //
  }
}
  1. new 演算子を使用して、size + 1 バイトの領域を割り当て、その先頭アドレスを buffer ポインタに格納する。
  2. new 演算子が失敗した場合、すべての例外をキャッチされる(catch (...))。
  3. GetLastError 関数を使用して、Windows プラットフォーム上で発生したエラーコードを取得する。
  4. もしエラーコードが ERROR_NOT_ENOUGH_MEMORY と一致する場合、特定のエラーに対処するためのコードを実行する。
    ※GetLastError 関数が new 演算子によってスローされた例外を直接キャッチするわけではなく、Windows プラットフォーム上で発生した直近のエラーコードを取得している。