1. ホーム
  2. c++

[解決済み] C++における不正なアロケーションの例外

2022-02-10 16:10:21

質問

私の学校の課題で、"SONY "を使わないでプログラムを作るように言われました。 STL

プログラムの中で、私は多くの

Pointer* = new Something;
if (Pointer == NULL) throw AllocationError();

アロケーションエラーについて質問です。

  1. があるのでしょうか? 自動例外 投げやり new アロケーションに失敗したら?
  2. を使用していない場合、どのようにそれをキャッチすることができますか? STL ( #include "exception.h" )?
  3. でございます NULL テストは十分ですか?

ありがとうございました。
使用しているのは eclipseCDT(C++) MinGW について Windows 7 .

解決方法は?

はい、メモリを確保できない場合、newオペレータは自動的に例外をスローします。

コンパイラが何らかの方法で無効化しない限り、new 演算子が NULL ポインタを返すことはありません。

を投げます。 bad_alloc 例外が発生します。

また nothrow のバージョンで使用することができます。

int *p = new(nothrow) int(3);

このバージョンでは、メモリが確保できない場合はヌルポインタを返します。しかし、これは100%の nothrow なぜなら、オブジェクトのコンストラクタはまだ例外を投げることができるからです。

もう少し情報を。 http://msdn.microsoft.com/en-us/library/stxdwfae(VS.71).aspx