3

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

5 回答 5

10

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

可能出现的问题:

  • cessna.org 太大,无法在您运行它的机器上处理
  • cessna.org 中的错误数据/逻辑导致它尝试分配无限量的内存

但是根据给出的信息是不可能说的。

于 2012-06-07T21:52:54.177 回答
2

我应该通过披露我的编码专业知识可以被慷慨地描述为新手来限定此响应。

我正在运行的一些代码也有类似的错误。原因似乎是当我像这样声明一个新数组时:

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

我在我的代码中多次这样做(数百万次?)。看来我最终内存不足。修复是在我完成后删除变量。

delete [] path_chr;

之后就再也没有问题了。

于 2012-07-26T17:39:44.023 回答
2

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

于 2014-03-28T01:53:46.993 回答
2

将解决方案平台 x86 更改为 x64。RAM 为 16Gb,但 x86 的视觉寻址仅 4Gb 块 配置管理器

于 2020-08-27T07:34:38.117 回答
0

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

于 2012-12-17T10:03:45.670 回答