2016-03-23 67 views
0

我在對話框中創建了一個複選框,並試圖訪問它的條件,無論是否選中。這是我的代碼:MFC「內存分配違規」

CButton *m_ctlCheckBlack = (CButton *)GetDlgItem(IDC_BLACK); 

int chkBoxBlack = m_ctlCheckBlack->GetCheck(); 

當我通過這個代碼運行時,它會彈出一個異常說:

Exception thrown at 0x0FA45564 (mfc140d.dll) in braille_obr.exe: 0xC0000005:  
Access violation reading location 0x00000020. 

任何幫助將不勝感激。謝謝。

+1

您已經詢問過此問題http://stackoverflow.com/q/36180788/4603670 ---只需查看兩行代碼就很難說。人們可以猜出問題所在,也可以花時間解釋你在做什麼。 –

+1

我想'm_ctlCheckBlack'由於某種原因是'NULL'。 –

+0

從哪裏調用包含您發佈的兩行代碼的函數? –

回答

0

也許,我懷疑它試圖得到按鈕的狀態,當按鈕還沒有構造。

int chkBoxBlack = m_ctlCheckBlack != NULL ? m_ctlCheckBlack->GetCheck() : 0; 

或者,你是否嘗試從外部對話框操作? 如果是這樣,你最好嘗試這樣做。

■CButton *m_ctlCheckBlack = (CButton *)yourdlg.GetDlgItem(IDC_BLACK); 

■FindWindowEx(yourdlg.GetSafeHwnd(), NULL, NULL, "(your button caption)"); 
+0

它返回一個0,但我沒有構造按鈕。什麼可能是可能的問題? – chaitanyakrishna

+1

這段代碼寫入了什麼事件處理程序? 即使CButton實例已經創建,按鈕控件作爲GUI的一部分還不存在,是嗎? – nariuji

+0

我創建了一個ID爲「IDC_BLACK」的複選框。 CButton正在引用該複選框。我在GUI中創建了一個複選框。 @nariuji – chaitanyakrishna

1

很少有很好的理由使用GetDlgItem。在你的資源編輯器中,右鍵點擊按鈕和'添加變量..' 它將默認爲一個控件。給它一個名字。您將在對話框類得到的成員:

CButton myButtonName; 

現在,應該是安全的:

myButtonName.GetChecked(); 

,因爲它會被創建和正確的子類。