2012-06-07 2 views
3

Необработанное исключение в 0x758cd36f в OSGP.exe: Microsoft C++ исключение: станд :: bad_alloc в ячейке памяти 0x0028ef70 ..C++ bad_alloc в памяти местоположения Исключение

Я пытаюсь выполнить код ниже в Visual Studio. Тем не менее, я продолжаю работать в исключении выше. Я добавил попытку поймать, чтобы помочь мне поймать ошибку, но бесполезно кажется. Я считаю, что проблема связана с вытекающей из выходного окна

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, назначающий 'bool' флаг' int', который никогда не используется, также немного глупо ;-) – AJG85

+0

Большая часть вывода - это только отладчик, говорящий вам, что он не может найти файл базы данных программы (символа). –

+0

Включить контрольные точки исключения в 'Debug-> Exceptions ...-> C++ Exceptions', чтобы вы остановились при вызове bad_alloc. – molbdnilo

ответ

5

станд :: bad_alloc обычно выбрасывается, если программа не имеет достаточно памяти для завершения запрошенное действие.

Возможные проблемы:

  • cessna.org слишком велик для обработки на компьютере вы работаете это на
  • плохих данных/логика cessna.org заставляя его, чтобы попытаться выделить бесконечное объем памяти

Но невозможно сказать с предоставленной информацией.

+0

Я могу открыть cessna.osg, используя osgviewer, без проблем, из командной строки, но добавить код, а затем запустить его, я получаю это исключение. Я хотел бы отладить его, и именно поэтому я добавил попытку catch, но это еще не помогло мне выяснить, что не так с этой небольшой программой. – user272671

+0

Вы не сможете отлаживать ошибку, как это происходит в OSGP.exe, если у вас нет исходного кода и символов для OSGP.exe.Также вы можете пригласить визуальную студию, когда вызывается исключение, а не использовать try/catch, перейдя в Debug-> Exceptions и добавьте std :: bad_alloc как исключение C++ –

1

Я должен квалифицировать этот ответ, раскрывая, что мой опыт в области кодирования может быть щедро описан как новичок.

У меня была аналогичная ошибка с кодом, который я запускал. Причина оказалась, когда я объявлял новый массив так:

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

Я делал это много раз (миллионов?) В моем коде. Похоже, у меня в конце концов закончилась память. Исправление было удалением переменной, когда я был сделан.

delete [] path_chr; 

Никогда не было проблем после этого.

0

Я нахожу, что это происходит, когда вы пытаетесь прочитать за концом массива. То есть, если вы попытаетесь получить доступ к большему количеству элементов, чем количество элементов, присутствующих в массиве.

2

Плохой адрес также может быть сброшен, если указатель на недопустимую память передается в конструкторе объекта.

Смежные вопросы