内存位置的C ++ bad_alloc异常

时间:2012-06-07 21:20:18

标签: c++ visual-studio-2010 opengl openscenegraph

  

OSGP.exe中0x758cd36f处的未处理异常:Microsoft C ++异常:内存位置为0x0028ef70的std :: bad_alloc ..

我正在尝试在Visual Studio中执行以下代码。但是,我一直遇到上面的例外。我添加了一个try catch来帮助我捕获错误,但似乎无济于事。我认为问题与输出窗口中的以下内容有关

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).**

以下是代码:

#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(); 
}

5 个答案:

答案 0 :(得分:6)

当程序没有足够的内存来完成请求的操作时,通常会抛出

std :: bad_alloc。

可能出现的问题:

  • cessna.org太大,无法在您运行的计算机上处​​理
  • cessna.org中的错误数据/逻辑导致它尝试分配 无限的记忆

但是不可能用所提供的信息说出来。

答案 1 :(得分:2)

如果在对象的构造函数中传递了指向无效内存的指针,则可能会抛出错误的alloc。

答案 2 :(得分:1)

我应该通过披露我的编码专业知识可以被慷慨地描述为新手来证明这一回应。

我运行的某些代码出现了类似的错误。原因似乎是当我宣布一个新的数组时:

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

我在代码中多次这样做(数百万?)看起来我最终耗尽了内存。修复是在我完成时删除变量。

delete [] path_chr;

之后从未遇到过问题。

答案 3 :(得分:1)

将解决方案平台x86更改为x64。 RAM是16Gb,但x86只能通过可视方式寻址4Gb块 Configuration Manager

答案 4 :(得分:0)

我发现当你尝试读取数组的末尾时会发生这种情况。也就是说,如果你尝试访问的元素多于数组中存在的元素数量。