Ошибка ON_COMMAND_RANGE в отображении памяти? - PullRequest
0 голосов
/ 30 марта 2012

Необработанное исключение ... Нарушение доступа с массивом для обратного вызова?

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 Ответ

1 голос
/ 31 марта 2012

Ваши идентификаторы варьируются от 2000 до 2009, но ваш массив от 0 до 9. Вам нужно вычесть начало диапазона для использования в качестве индекса массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...