Cross-compiler way to handle memory allocation failure ?

K

Koen

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
 
M

Michiel Salters

Koen said:
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++.

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.
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?

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,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,832
Latest member
GlennSmall

Latest Threads

Top