2012-06-07 459 views
3

在OSGP.exe在0x758cd36f 未處理的異常:微軟C++異常:性病:: bad_alloc的內存位置0x0028ef70 ..C++ 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(); 
} 
+0

'osgDB :: readNodeFile(「cessna.osg」);'如果無法打開文件,可以返回nullptr。 FYI給'int'標誌分配一個以前沒有使用過的'int'標誌也是有點愚蠢;-) – AJG85

+0

大多數輸出​​只是調試器告訴你它找不到程序數據庫(符號)文件。 –

+0

打開'Debug-> Exceptions ...-> C++ Exceptions'中的異常斷點,以便在引發bad_alloc時停止。 – molbdnilo

回答

5

當程序沒有足夠的內存來完成的std :: bad_alloc的通常拋出要求的行動。

可能出現的問題:

  • cessna.org太大而不能在運行 此機器上處理上
  • 壞數據/在cessna.org邏輯導致它嘗試分配 無限內存容量

但是用所給出的信息來說是不可能的。

+0

我能夠使用osgviewer從命令行打開cessna.osg,沒有問題,但添加代碼然後運行它,我得到這個異常。我想調試它,這就是爲什麼我添加了try catch,但這還沒有幫助我找出那個小程序出了什麼問題。 – user272671

+0

您將無法調試錯誤,因爲它在OSGP.exe中發生,除非您有OSGP.exe的源代碼和符號。你也可以讓Visual Studio在拋出異常時提示你,而不是使用try/catch,方法是進入Debug-> Exceptions並將std :: bad_alloc添加爲C++ Exception –

1

我應該通過披露我的編碼專業知識可以被慷慨地描述爲新手來限定此答覆。

我有一個類似的錯誤,我正在運行一些代碼。原因似乎是,當我宣佈一個新的數組,像這樣:

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

我在我的代碼做了很多次(百萬?)。看起來我最終耗盡了記憶。修復完成後刪除變量。

delete [] path_chr; 

之後從來沒有問題。

0

我發現,當您嘗試讀取數組的末尾時會發生這種情況。也就是說,如果您試圖訪問比數組中存在的元素數量多的元素。

2

如果在對象的構造函數中存在指向無效內存的指針,則也可能拋出錯誤的alloc。

相關問題