Cross-compiler way to handle memory allocation failure ?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Koen

    Cross-compiler way to handle memory allocation failure ?

    Hi!
    What is the method you use to handle memory allocation failure in C++
    using the "new" operator?
    I used to only check if a NULL pointer is returned after the "new" call,
    but that's probably only working in MSVC++.
    I also read about the "bad_alloc" exception, but that doesn't seem to be
    thrown by MSVC++.
    Now, one could of course say "don't use MSVC++", but I'd rather like to
    hear a good solution for being able to handle memory allocation failure
    in a cross-compiler way (we're using MSVC++ on windows and gcc on
    linux). Any ideas anyone?
    Is installing a new handler the only way to be sure?
    Koen


  • Michiel Salters

    #2
    Re: Cross-compiler way to handle memory allocation failure ?

    "Koen" <no@ssppaamm.co m> wrote in message news:<bd9ftc$lv f$1@gaudi2.UGen t.be>...[color=blue]
    > Hi!
    > What is the method you use to handle memory allocation failure in C++
    > using the "new" operator?
    > I used to only check if a NULL pointer is returned after the "new" call,
    > but that's probably only working in MSVC++.
    > I also read about the "bad_alloc" exception, but that doesn't seem to be
    > thrown by MSVC++.[/color]

    Not in the last two versions. You have to go back to the 6.0 series,
    which predates the standard. Both VC7.0 and VC7.1 get it right.
    [color=blue]
    > Now, one could of course say "don't use MSVC++", but I'd rather like to
    > hear a good solution for being able to handle memory allocation failure
    > in a cross-compiler way (we're using MSVC++ on windows and gcc on
    > linux). Any ideas anyone?
    > Is installing a new handler the only way to be sure?[/color]

    I believe installing a new handler is also buggy on VC6. Upgrading from
    VC6 to VC7 is relatively painless; i've done it on more than one project.
    As others mentioned, new(nothrow) is an option.

    For windows, this often is a bit of a non-issue though. Windows will
    swap to death before failing, the user will probably kill off the
    program first. The only case I know that fails fast enough to matter is
    running into the 2Gb limit, if your PC has more than 2Gb RAM. I don't
    know if that's implemented properly in VC6, though.

    Regards,
    --
    Michiel Salters

    Comment

    Working...