ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

newが失敗したとき

newでメモリ確保に失敗したときはbad_alloc例外が投入される。
私はてっきりNULLを返すと思っていたけど、それはC++ができた初期のころだけだったらしい。
実際に試してみたコード。

#include <iostream>
using namespace std;

void main()
{
    int* p;

    for(int i=0; i<1000; i++)
    {
        try {
            p = new int[100000000];
        } catch (bad_alloc xa) {
            cout << p << endl;
            return;
        }
        cout << p << endl;
    }
}

実行結果

00408CA2
007B0020
18530020
302B0020
302B0020

最後のpの値が変わっていないことから、やっぱりNULLは返していないらしい。
と思ったが、newが失敗した時点で例外でcatchのブロックに飛んでしまうからpの値は更新されないのか。
試しに例外を取らないようにしてみたが、newが失敗した時点でプログラムが異常終了してしまうので確認できなかった。