2012-03-30 77 views
0

未处理的异常...使用数组进行回调访问冲突?ON_COMMAND_RANGE值到内存映射失败?

BEGIN_MESSAGE_MAP(yoda, CDialog) 
    ON_COMMAND_RANGE(2000, 2009, OnChannelClick) 


BOOL yoda::OnInitDialog() 
{ 
    chbxChannel = new CButton[10]; 

    CString s; 

    for (i = 0; i < 10; i++){ 
     (chbxChannel + i) -> Create("", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, CRect(80-50, 100+i*20, 100-50, 120+i*20), this, 2000+i); 


     s.Format("%d",(chbxChannel + nID) -> GetCheck()); // <-- Works fine 
     MessageBox(s); 

    } 
} 


void yoda::OnChannelClick(UINT nID) 
{ 
    CString s; 
    s.Format("%d",nID);// values for nID are correct 
    MessageBox(s); 

    s.Format("%d",(chbxChannel + nID) -> GetCheck()); //?? <-- Unhandled Exception... Access Violation ????? 
    MessageBox(s); 
} 
  • 出于某种原因,在回调的指针偏移实例地址不匹配的地址偏移?

回答

1

您的ID范围从2000到2009,但您的数组是从0到9.您需要减去范围的开始以用作数组索引。