4

局所性やパフォーマンスなどをチェックするために多くのオブジェクトを割り当てる必要がある宿題用のプログラムを書いています。スローされた例外をキャッチできないようですnew

#include "List.h"
#include<iostream>
#include <exception>

int main(int argc, char **argv) {
    cout << "size of List c++ : " << sizeof(List) << endl;  //16
    List * ptrList = new List();
    unsigned long var = 0;
    try {
        for (;; ++var) {
            List * ptrList2 = new  List();
            ptrList->next = ptrList2;
            ptrList2->previous = ptrList;
            ptrList = ptrList2;
        }
    } catch (bad_alloc const& e) {
        cout << "caught : " << e.what() << endl;
//  } catch (...) { //this won't work either
    }

結果:

このアプリケーションは、異常な方法で終了するようランタイムに要求しました。詳細については、アプリケーションのサポート チームにお問い合わせください。

割り当て部分を次のように変更すると:

            List * ptrList2 = new (nothrow) List();
            if (!ptrList2) {
                cout << "out of memory - created " << var << " nodes" << endl;
                break;
            }

私は素晴らしいを得ます:

out of memory - created 87921929 nodes

なぜ私はキャッチできないのbad_allocですか?

Windows 7 x64 Proでmingwinを使用しています

C:\Users\MrD>g++ --version
g++ (GCC) 4.7.2

リスト :

class List {
    long j;
public:
    List * next;
    List * previous;
    virtual long jj() {
        return this->j;
    }
    List() {
        next = previous = 0;
        j = 0;
    }
    virtual ~List() {
        if (next) {
            next->previous = this->previous;
        }
        if (previous) {
            previous->next = this->next;
        }
    }
};
4

1 に答える 1

1

誰も志願しなかったので、特にデバッグについてはGeorge Koehlerの回答を参照してください-gdb結局のところバグのようですが、これが検証されるまで回答を受け入れません -待つのにうんざりしています.

于 2012-12-13T22:02:13.800 に答える