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



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

我没有使用任何 glutInit 函数,因为它们会干扰程序,而且它们无论如何都不是必需的。

有谁知道为什么我在此回调时收到此错误?

这是我的初始化函数:

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

这是我的鼠标函数:

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

我注意到一件事,当我在我的初始化方法中调用mouseFunction()作为普通函数调用时,不会发生错误,但是一旦我尝试将mouseFunction与glutMouseFunc(mouseFunction)一起使用,就会发生错误,所以我相信这更像是glutMouseFunc的错误。

我没有使用任何 glutInit 函数,因为它们会干扰程序,而且它们无论如何都不是必需的。

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

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

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

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

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

如果是茶壶,好吧,你也可以在没有 GLUT 的情况下拥有它。

最新更新