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