3

OSGP.exe の 0x758cd36f で未処理の例外: Microsoft C++ 例外: std::bad_alloc メモリ位置 0x0028ef70..

以下のコードを 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 に答える
0

これは、配列の終わりを超えて読み込もうとしたときに発生することがわかりました。つまり、配列に存在する要素の数よりも多くの要素にアクセスしようとした場合です。

于 2012-12-17T10:03:45.670 に答える