小弟遇到一个问题,相关代码如下:  
 
EventQueue->AddToEnd(pEv);  
 
AddToEnd这个函数定义如下:  
BOOL  CMyEventQueue::AddToEnd(MyEvent  *pEv)  
{  
           csEnter(m_lock);  
           m_Queue.push_back(pEv);  
           csLeave(m_lock);  
           return  TRUE;  
}  
 
执行到EventQueue->AddToEnd(pEv);时,汇编代码如下:  
276:            EventQueue->AddToEnd(pEv);      
0040C754      mov                  eax,dword  ptr  [ebp-18h]        
0040C757      push                eax  
0040C758      mov                  ecx,dword  ptr  [ebp-4]  
0040C75B      mov                  ecx,dword  ptr  [ecx+144h]    <===单步运行完此句跳出错误  
0040C761      call                @ILT+560(CMyEventQueue::AddToEnd)  (00401235)  
 
错误信息:  
Unhandled  exception  in  test.exe:  0xC0000005:Access  Violation  
 
奇怪的是这段代码有时候完全正常,而有时候会出错。  
 
请问是何原因啊?  多谢!

解决方案 »

  1.   

    EventQueue没有初始化,或者给了非法地址。
      

  2.   

    用指针之前先要判断他是否合法ASSERT(EventQueue != NULL && pEv != NULL)
    EventQueue->AddToEnd(pEv); ---------
      ++C++
    ---------
      

  3.   

    我查过了,确实是EventQueue这个指针有问题,上面问题已经解决。
    不过,执行完这行code,紧接着执行return TRUE;再F5执行“}”的时候,又出现
    Unhandled exception in test.exe: 0xC0000005:Access Violation请问这是为何啊?多谢!bool func()
    {
    ......
    EventQueue->AddToEnd(pEv); 
    return TRUE;
    }