2016-03-23 24 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 --- 2行のコードを見るだけでは難しいです。人々は問題が何であるかを推測したり、あなたが何をしているかを説明する時間を取ることができます。 –

+1

何らかの理由で 'm_ctlCheckBlack'が' NULL'だと思います。 –

+0

投稿したコードの2行を含む関数をどこから呼び出していますか? –

答えて

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の一部としてのButton Controlはまだ存在しませんか? – nariuji

+0

ID「IDC_BLACK」のチェックボックスを作成しました。 CButtonがそのチェックボックスを参照しています。私はGUIでチェックボックスを作成しました。 @nariuji – chaitanyakrishna

1

GetDlgItemを使用する理由はほとんどありません。リソースエディタで、ボタンを右クリックし、[変数を追加]をクリックします。 デフォルトではコントロールとして使用されます。名前を付けてください。あなたは、ダイアログクラスのメンバーを取得します。それが作成されているだろうと適切にサブクラス

myButtonName.GetChecked(); 

CButton myButtonName; 

は、今では安全にする必要があります。