'C++ bad_alloc at memory location Exception

Unhandled exception at 0x758cd36f in OSGP.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0028ef70..

I am trying to execute the code below in Visual Studio. However, i keep running into the exception above. I added a try catch to aid me in catching the error but to no avail it seems. I believe the problem is related to the following from the output window

First-chance exception at 0x758cd36f in OSGP.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0019f2f4..
First-chance exception at 0x758cd36f in OSGP.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0019ec84..
First-chance exception at 0x758cd36f in OSGP.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
The thread 'Win32 Thread' (0x16dc) has exited with code 0 (0x0).
The program '[448] OSGP.exe: Native' has exited with code 0 (0x0).**

Here's the code:

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <new>

#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{ 
    int flag = false;
    osgViewer::Viewer viewer;
     osg::ref_ptr<osg::Node> root;
    try
    { 
        root = osgDB::readNodeFile("cessna.osg");
        viewer.setSceneData(root.get()); 
    }
    catch(bad_alloc)
    { 
        if (flag) cout << "a bad_alloc exception just occured"; 
    }
    return viewer.run(); 
}


Solution 1:[1]

std::bad_alloc is commonly thrown when the program doesn't have enough memory to complete the requested action.

Possible problems:

  • cessna.org too large to be processed on the machine you are running this on
  • bad data/logic in cessna.org causing it to try to allocate an infinite amount of memory

But it is impossible to say with the information given.

Solution 2:[2]

A bad alloc may also get thrown if there's a pointer to invalid memory being passed in an object's constructor.

Solution 3:[3]

I should qualify this response by disclosing that my coding expertise can be generously described as novice.

I had a similar error with some code that I was running. The cause appeared to be when I was declaring a new array like so:

path_chr = new char [path.size()+1];

I was doing this many times (millions?) in my code. It looks like I eventually ran out of memory. The fix was deleting the variable when I was done.

delete [] path_chr;

Never had problems after that.

Solution 4:[4]

Change solution platform x86 to x64. RAM is 16Gb but visual addressing only 4Gb block by x86 Configuration Manager

Solution 5:[5]

I find that this happens when you try to read past the end of an array.. That is, if you try to access more elements than the number of elements present in the array.

Solution 6:[6]

I was facing a pretty similar problem for OSG setup; turns out Visual Studio by default will not link Release OSG dlls to your Debug application appropriately. I reconfigured for Release and observed readNode() didn't throw bad_alloc and ran successfully. I believe the permanent solution is to build OSG yourself.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Robin Rowe
Solution 3 Ali
Solution 4 Ă–mer Faruk Acar
Solution 5 mahela007
Solution 6 Sparsh Priyadarshi