.exe 遇到有关问题需要关闭

【求助】.exe 遇到问题需要关闭最近需要从一个摄像头中SDK中获取其信号,并且将是视频流制作成AVI文件,但是最

【求助】.exe 遇到问题需要关闭
最近需要从一个摄像头中SDK中获取其信号,并且将是视频流制作成AVI文件,但是最后的信号还要返回到JAVA语言。
所以采用了JNI的方式。将从SDK中去信号的部分用C++实现,并制作成DLL文件,其中涉及到了一些MFC的内容;
然后在JAVA端获取DLL中的信号,并将JAVA程序制作成JAR文件,使用CMD命令行运行 java -jar ****.jar
DLL采用Release版本。

关键问题是这个程序在我电脑上连续运行是没有问题的;当我把它移植到虚拟机上的时候,他就会在第二次录像开始的时候,报错: java.exe遇到问题需要关闭。。。

好抑郁呀,在网上查了下,有人说可能是C++中有各种数组越界呀,指针之类的问题,但是我很好奇的是,为什么我在自己的电脑上就好用呢?如果有这一类的问题,应该在那台电脑上都不好用的吧???

求各位大侠帮忙呀!!!我快要被这个问题困扰死了 因为我不想一天天的开着电脑来执行这个程序。。。。想要移植到其他电脑上。。。

贴上录像一部分的代码,请各位大侠给指正一下,估计错误不少
主要包括两个类A 和 B;一旦要开始录像,创建一个新的线程(线程函数在A类中,我创建了新的线程,但并未创建新的对象);在线程中向摄像头请求视频流,然后调用B类中的函数,来实现AVI的制作


//0.1 这一部分是线程的创建
if ((m_hThread = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)InitThreadProc,this,0,&dwThread)) 
  == NULL) {
std::cout<<"CreateThread error!!!"<<std::endl;
return false;
}
else{
std::cout<<"CreateThread OK!!!"<<std::endl;
//第二次录像开始后,打印完“CreateThread OK”之后,就弹出“Java.exe 遇到问题需要关闭”
}

//0.2 InitThreadProc函数,是类A中的静态成员函数
static DWORD InitThreadProc(LPVOID pv) 
{
A* pThis = (A*) pv;
return pThis ->VideoThread(NULL);
   };



//1. 这一部分就是线程中要执行的主要函数,VideoThread函数
//其中, B b,*p;
// p = &b;
while(m_bRun)
   {        if(p->ifStop == false)
   {
......
                    
      
    if(m_pIDMIPCClient->SyncRequest(&sDM_MPEG_Request,&sDM_MPEG_Data,pDM_MPEG_RequestOut,pMPEGData))//for synchronized request
        {               //获取视频流信息
.......

    p->m_FileInputRdy = true;
p->FormatAVIVideo(&(pRpy_MPEG_Cam->bmpHeader),((char*)pMPEGData+sizeof(IPC_RPY_CAM_EXT)),pRpy_MPEG_Cam->Args.mpegData.bKey);
        }
        else
    { 
//AfxMessageBox("grabframe error");
std::cout<<"syncrequest error"<<std::endl;
return -1;
    } //end else
   }//end if
   else{
std::cout<<"The thread has been stopped"<<std::endl;
return 0;
   }



//2. 这一部分用于判断录像时间是否达到要求,若达到要求,则停止录像,是B类中的函数
AVI_Exit(this->cam, this->pfile, this->ps, this->tmp_buf, this->Record_Complete.m_hObject);



//3.这一部分是AVI_Exit函数
BOOL B::AVI_Exit(int nCamToStop, PAVIFILE pfileToStop, PAVISTREAM psToStop, BYTE *tmp_bufToStop, HANDLE m_hObject )
{
::WaitForSingleObject(m_hObject,INFINITE);
m_FileInputRdy=false;
this->ifStop = true;      //这个位置是为了让A中的线程退出,停止录像
AVIStreamClose(psToStop);
if(pfileToStop != NULL)
  AVIFileRelease(pfileToStop);
AVIFileExit();
delete []tmp_buf; 
A a, *pApp;
pApp = &a;
pApp->camList.erase(nCamToStop);
return true;
}


JNI C++
[解决办法]
既然有人说是C++的数组越界等指针问题,那就检查一下呗,,不懂帮顶
[解决办法]
虚拟机内存开大点试试。
我感觉这个是虚拟机的问题。
[解决办法]
自己电脑上能用,别人不能用,查看是不是你装了相关程序,或配置,相关库没有拷贝.. 
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。