C++ bad_alloc at memory location Exception
Solution 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
Change solution platform x86 to x64. RAM is 16Gb but visual addressing only 4Gb block by x86
Solution 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
A bad alloc may also get thrown if there's a pointer to invalid memory being passed in an object's constructor.
user272671
Updated on August 27, 2020Comments
-
user272671 almost 4 years
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(); }