使用glutMouseFunc获取访问冲突读取位置0x000000b0

时间:2014-02-17 21:56:16

标签: c++ opengl glut access-violation

我正在使用glutMouseFunc(mouseFunction);作为一个回调,但我不断在此行glutMouseFunc(mouseFunction)获取访问冲突读取位置0x000000b0;

我没有使用任何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!");
          }
      }

我注意到了一件事,当我在我的Initialize方法中调用mouseFunction()作为普通函数调用时没有出现错误但是一旦我尝试使用带有glutMouseFunc(mouseFunction)的mouseFunction,就会发生错误所以我相信这对glutMouseFunc来说更像是一个错误。

2 个答案:

答案 0 :(得分:3)

  

我没有使用任何glutInit函数,因为它们干扰了程序,反正它们并不重要。

这是你的问题。如果您打算使用GLUT,请正确使用它。

glutInit()函数 必不可少 - 它的作用之一就是初始化GLUT中的内部状态。正如您所发现的,由于此状态未正确初始化,GLUT的其他部分(例如鼠标事件处理!)可能无法正常工作。

答案 1 :(得分:2)

鉴于您对其他问题的评论很简单,您在没有GLUT窗口的情况下调用glutMouseFunc。尝试在没有正确初始化的情况下注册GLUT事件回调或没有创建GLUT窗口使程序崩溃。

您还会说“GLUT干扰”您的实际窗口。那么,如果你没有一个可以实际接收GLUT派遣事件的窗口,你为什么要尝试注册一个GLUT回调呢?

您应该使用已经拥有的窗口的鼠标事件处理。那么你用GLUT做什么呢? GLUT的全部目的是为您创建一个窗口并进行事件管理。如果您不使用GLUT,则根本不要使用GLUT。

如果是茶壶,那么你也可以没有GLUT。