opengl C++ bad_alloc位于内存位置异常

eqzww0vc  于 2022-11-23  发布在  其他
关注(0)|答案(6)|浏览(190)

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

xkftehaa1#

std::bad_alloc通常在程序没有足够的内存来完成请求的操作时抛出。
可能的问题:

  • cessna.org太大,无法在运行此程序的计算机上处理
  • www.example.com中的错误数据/逻辑cessna.org导致其尝试分配无限数量的内存

但以所给的信息,这是不可能说的。

wb1gzix0

wb1gzix02#

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

iyr7buue

iyr7buue3#

我应该通过透露我的编码专业知识可以慷慨地描述为新手来限定这个回答。
我在运行的一些代码中也遇到了类似的错误。原因似乎是当我声明一个新数组时,如下所示:

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

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

delete [] path_chr;

从那以后就再也没有问题了。

zf9nrax1

zf9nrax14#

将解决方案平台从x86更改为x64。RAM为16Gb,但通过x86

只能对4Gb数据块进行可视寻址

mbjcgjjk

mbjcgjjk5#

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

3phpmpom

3phpmpom6#

我在OSG设置中遇到了一个非常类似的问题;我发现Visual Studio在默认情况下不会将 Release OSG dll正确地链接到您的 Debug 应用程序。我重新配置了Release,并观察到readNode()没有抛出bad_alloc并成功运行。我相信永久的解决方案是自己构建OSG。

相关问题