TheoraVideoManager не инициализирует необработанное исключение в 0x7329E13D (msvcr110.dll)

У меня, кажется, есть проблема, когда я продолжаю получать исключение необработанного исключения из-за того, что 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);

}

/////////////////////////////

2

Решение

Ваш код не заботится о том, что используемые вами указатели являются 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" }

.....
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]