author | Markus Bröker <mbroeker@largo.dyndns.tv> |
Thu, 14 May 2009 17:31:45 +0200 | |
changeset 92 | 0bc2646daa82 |
parent 77 | 49e0babccb23 |
permissions | -rw-r--r-- |
/** * bad_alloc.cc * Copyright (C) 2008 Markus Broeker */ #include <iostream> #include <vector> #include <exception> #include <sys/time.h> #include <sys/resource.h> #include <cstdlib> using namespace std; int set_limit (int megs) { struct rlimit rlim; rlim.rlim_cur = megs; rlim.rlim_max = 1.25 * megs; if (megs > (4 * 1024 * 1024)) return setrlimit (RLIMIT_AS, &rlim); return EXIT_FAILURE; } int main (int argc, char **argv) { vector < int >v; int i = 0; char action; if (set_limit (20 * 1024 * 1024)) { cout << "System error" << endl; return EXIT_FAILURE; } try { for (;;) { v.push_back (i++); } } catch (exception & e) { cout << e.what () << " after " << i << " iterations" << endl << endl; cout << "Would you like to see the full error message? (y/n) "; cin >> action; v.clear (); switch (action) { case 'y': throw; break; } } return EXIT_SUCCESS; }