2014-02-17 2 views
0

Я использую glutMouseFunc (mouseFunction); в качестве обратного вызова, однако, я продолжаю получать данные о местоположении нарушения доступа 0x000000b0 на этой строке glutMouseFunc (mouseFunction);Получить доступ к точке считывания доступа 0x000000b0 с glutMouseFunc

Я не использую ни одну из функций glutInit, потому что они мешают программе, и они в любом случае не важны.

Кто-нибудь знает, почему я получаю эту ошибку при обратном вызове?

Вот моя функция инициализации:

int Initialize() 
    { 
     /* Bunch of code here that is irrelevant to the problem.......*/ 
     glutMouseFunc(mouseFunction); // Error occurs here. 
    } 

А вот мой mouseFunction:

void mouseFunction(int button, int state, int x, int y){ 
     if(button==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN) 
      { 
       printf("Pressed middle mouse button!"); 
      } 
     } 

Я заметил одну вещь, хотя, есть ошибка не происходит, когда я называю mouseFunction() как обычный вызов функции в моем методе Initialize, однако, как только я попытаюсь использовать mouseFunction с glutMouseFunc (mouseFunction), чем ошибка, так что я считаю, что это скорее ошибка с glutMouseFunc.

+2

* Я не использую ни одну из функций glutInit, потому что они мешают программе, и они в любом случае не важны. * Er, что! –

+0

Каково содержимое стека вызовов при сбое? Вероятно, в GLUT, так как вы не потрудились правильно настроить его, а затем взрываются. – paulm

+0

То, что я имею в виду, это glutCreateWindow по большей части мешает, поэтому я просто оставьте это. – Morelka

ответ

2

Учитывая ваши комментарии к другим вопросам, ваша проблема проста, что вы вызываете glutMouseFunc без окна GLUT. Попытка зарегистрировать обратные вызовы событий GLUT без правильной инициализации или без созданного окна GLUT будет сбой вашей программы.

Вы также говорите, что «GLUT вмешивается» в ваше фактическое окно. Итак, почему вы пытаетесь зарегистрировать обратный вызов GLUT вообще, если у вас нет окна, которое могло бы фактически получать события для отправки GLUT?

Вы должны использовать обработку событий мыши в окне, которое у вас уже есть. И что вы используете GLUT для этого? Вся цель GLUT заключается в создании окна для вас и управлении событиями. Если вы не используете GLUT для этого, тогда вообще не используйте GLUT.

Если это для чайника, ну, вы можете получить это без GLUT.

+0

Благодарим вас за ответ.Это была самая полезная информация, которую я получил, которая в основном указывала на очевидное. Я попробую пойти по другому маршруту. Еще раз спасибо! – Morelka

3

Я не пользуюсь ни одной из функций glutInit, потому что они мешают программе, и они в любом случае не важны.

Это ваша проблема. Если вы собираетесь использовать GLUT, используйте его правильно.

Функция glutInit()is essential - часть того, что она делает, инициализирует внутреннее состояние внутри GLUT. Как вы выяснили, при правильном инициализации этого состояния другие части GLUT (такие как обработка событий мыши!) Могут работать неправильно.

+1

ОК, но когда я использовал функцию glutInit() с соответствующими параметрами, я все равно получаю тот же результат ... – Morelka

Смежные вопросы