У меня, кажется, есть проблема, когда я продолжаю получать исключение необработанного исключения из-за того, что TheoraVideoManager не инициализируется, в основном я получаю необработанное исключение в 0x7329E13D (msvcr110.dll) в Win32Project1.exe: 0xC0000005: Место чтения нарушения доступа 0x00194000.
вот как я это делаю
#include <theoraplayer/TheoraPlayer.h>
#include <theoraplayer/TheoraDataSource.h>
#include "theoraplayer/TheoraVideoManager.h"TheoraVideoManager *mgr ;
/////////////////////////////////
void init(void)
{
mgr=new TheoraVideoManager();
char* x="one.ogg";
Texttemp=new THVideo(x);
}
////////////
Video.h
extern TheoraVideoManager *mgr ;
//////////////
THVideo(char* File){
///// crashes here on clip
clip=mgr->createVideoClip(new TheoraMemoryFileDataSource(File));
clip->setAutoRestart(1);
clip->pause();
texture->texID=createTexture(nextPow2(clip->getWidth()),nextPow2(clip->getHeight()), textureFormat);
}
/////////////////////////////
Ваш код не заботится о том, что используемые вами указатели являются init с чем-то отличным от NULL. поэтому, если что-то не так при инициализации вашего менеджера или инициализации клипа, вы используете указатель и вылетаете без дополнительных подробностей.
Сначала объявите менеджер как статический с нулевым значением.
TheoraVideoManager *mgr = NULL;
Теперь предположим, что THVideo является классом, а этот клип является членом данных.
Во всем вашем коде проверьте, не является ли указатель нулевым, как показано ниже, и сгенерируйте исключение, если что-то пойдет не так.
THVideo(const char* File){
if (mgr == NULL)
{ throw "null pointer";}
clip=mgr->createVideoClip(new TheoraMemoryFileDataSource(File));
if(clip == NULL)
{ throw "error on file data source" }
.....
}
Других решений пока нет …