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