typedef struct
{
    CDataLocal *pLData;
    CDataRemote *pRData;
}_TwoPointerStruct;void ProcessData(CDataLocal *pLData,CDataRemote *pData2)
{
    _TwoPointerStruct param;
    param.pLData= pLData;
    param.pRData= pData2;    int iDataItem = pLData->DataItem;
    CString sMsg;
    sMsg.Format( _T("the current data is: %d"),iDataItem);    CWinThread *pThreadHangup = AfxBeginThread( (AFX_THREADPROC)HangupThread,
                      LPVOID(&param),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL );     ASSERT( pThreadHangup );
    if( pThreadHangup != NULL )
    {
pThreadHangup->m_bAutoDelete = TRUE;
pThreadHangup->ResumeThread();
    }
}void CTW8VID::HangupThread(LPVOID pParam)
{
_TwoPointerStruct *param = (_TwoPointerStruct *)pParam;
CDataLocal * pData1 = param->pLData;
CDataRemote * pData2= param->pRData; ASSERT( pData1 && pData2);
         
         int iDataItem = pData1->DataItem;  //  <=======此处报指针错误,为什么啊?
         
}程序执行到出现对话框“the current data is 100”,
然后进入线程,线程报指针错误,
晕啊,今天脑袋里面灌水了,为什么会出现错误啊?
大家赶紧救急啊

解决方案 »

  1.   

    ASSERT( pThreadHangup != NULL );
    ASSERT( pData1 != NULL && pData2 != NULL );
    刚才写得急,写错了,请问程序错在哪里啊?
      

  2.   

    是因为  _TwoPointerStruct param;临时变量
    在函数ProcessData完成了就无效了.
    可以放在外面
    _TwoPointerStruct param;
    void ProcessData(CDataLocal *pLData,CDataRemote *pData2)
    {
      

  3.   

    void ProcessData(CDataLocal *pLData,CDataRemote *pData2)
    {
        _TwoPointerStruct* param = new _TwoPointerStruct;
        param->pLData= pLData;
        param->pRData= pData2;    int iDataItem = pLData->DataItem;
        CString sMsg;
        sMsg.Format( _T("the current data is: %d"),iDataItem);    CWinThread *pThreadHangup = AfxBeginThread( (AFX_THREADPROC)HangupThread,
                          (LPVOID)param,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL ); 
        ....}void CTW8VID::HangupThread(LPVOID pParam)
    {
    _TwoPointerStruct *param = (_TwoPointerStruct *)pParam;
    CDataLocal * pData1 = param->pLData;
    CDataRemote * pData2= param->pRData; ASSERT( pData1 && pData2);
             
             int iDataItem = pData1->DataItem;  //  <=======此处报指针错误,为什么啊?
             
            delete param;
    }