【MFC】0xC0000005: 讀取位置 0x00000020 時發生訪問沖突


原因:使用GetDlgItem()函數時需要先判斷指針然后才可以使用。

錯誤代碼:

//重新建一個線程,查詢幀同步
DWORD WINAPI SCsync_Thread(LPVOID Lparam)
{
    CTABPAGE1 * ppPage = (CTABPAGE1 *)Lparam;;// 創建指針指向當前類
    ULONG SYNC;
    char SSync[4];
    while(1)
    {
        ppPage->ReadReg(hDev, 0x08, &SYNC, 1);//該地址讀取出來低八位是同步信息
        memcpy(SSync,&SYNC,4*sizeof(char));
        if (SSync[3] == 1)//說明已經同步
        {
            ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_SHOW);//顯示綠燈
            ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_HIDE);
        }
        else
        {
            ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_SHOW);//顯示紅燈
            ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_HIDE);
        }
    }

}

 

加上判斷指針之后的正確的代碼:

//重新建一個線程,查詢幀同步
DWORD WINAPI SCsync_Thread(LPVOID Lparam)
{
    CTABPAGE1 * ppPage = (CTABPAGE1 *)Lparam;;// 創建指針指向當前類
    ULONG SYNC;
    char SSync[4];
    while(1)
    {
        ppPage->ReadReg(hDev, 0x08, &SYNC, 1);//該地址讀取出來低八位是同步信息
        memcpy(SSync,&SYNC,4*sizeof(char));
        if (SSync[3] == 1)//說明已經同步
        {
            if (ppPage->GetDlgItem(IDC_STATIC_SCsync_green))
            ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_SHOW);//顯示綠燈
            if (ppPage->GetDlgItem(IDC_STATIC_SCsync_Red))
            ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_HIDE);
        }
        else
        {
            if (ppPage->GetDlgItem(IDC_STATIC_SCsync_Red))//判斷之后才能使用該指針
            ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_SHOW);//顯示紅燈
            if (ppPage->GetDlgItem(IDC_STATIC_SCsync_green))
            ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_HIDE);
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM