bad_alloc.cc
author Markus Bröker <mbroeker@largo.dyndns.tv>
Sat, 13 Dec 2008 17:57:57 +0100
changeset 5 d752cbe8208e
parent 2 97beb75e5ac7
child 8 96d16dfe787a
permissions -rw-r--r--
asm and parser demos added committer: Markus Bröker <mbroeker@largo.homelinux.org>

#include <iostream>
#include <vector>
#include <exception>
#include <sys/time.h>
#include <sys/resource.h>

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.resize(0);
        switch (action) {
        case 'y':
            throw;
            break;
        }
    }

    return EXIT_SUCCESS;
}