bad_alloc.cc
author Markus Bröker <mbroeker@largo.dyndns.tv>
Sat, 13 Dec 2008 17:58:16 +0100
changeset 23 7acfc5eda7ed
parent 13 2640a7fd96ca
child 28 54addf5893ef
permissions -rw-r--r--
this seems to be the proper way under ms, but it won't work under wine committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 * test/demos/bad_alloc.cc
 * Copyright (C) 2008 Markus Broeker
 */

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

    return EXIT_SUCCESS;
}