以下の内容はhttps://toburau.hatenablog.jp/entry/20090207/1234022043より取得しました。


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が失敗した時点でプログラムが異常終了してしまうので確認できなかった。




以上の内容はhttps://toburau.hatenablog.jp/entry/20090207/1234022043より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14