我似乎有一个问题,我继续得到一个未处理的异常异常,因为TheoraVideoManager没有初始化基本上我在Win32Project1.exe中的0x7329E13D(msvcr110.dll)得到未处理异常:0xC0000005:访问冲突读取位置0x00194000。 / p>
这是我在做什么
#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);
}
/////////////////////////////
答案 0 :(得分:3)
如果你使用的指针初始化为不同的NULL,你的代码就不会小心了。因此,如果在管理器初始化或剪辑初始化时出现错误,则使用指针并在没有更多详细信息的情况下崩溃。
首先将管理器声明为具有空值的静态。
TheoraVideoManager *mgr = NULL;
现在假设THVideo是一个类,该剪辑是数据成员。 在你的所有代码中检查指针是否如下所示不为null并在出现错误时抛出异常。
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" }
.....
}