2014-02-17 47 views
0

我正在使用glutMouseFunc(mouseFunction);作爲回調,但我不斷得到訪問衝突讀取位置0x000000b0在這一行glutMouseFunc(mouseFunction);使用glutMouseFunc獲取訪問違規讀取位置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!"); 
      } 
     } 

我注意到,雖然一兩件事,在那裏當我打電話mouseFunction不會發生錯誤()作爲我的Initialize方法中的正常函數調用,但是一旦我嘗試使用glutMouseFunc(mouseFunction)的mouseFunction,就會發生錯誤,所以我認爲這更多的是glutMouseFunc的錯誤。

+2

*我沒有使用任何glutInit函數,因爲它們干擾程序,它們不是必需的。*呃,什麼! –

+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()函數必不可少 - 它所做的一部分是初始化GLUT中的內部狀態。正如你所發現的,在這個狀態沒有正確初始化的情況下,GLUT的其他部分(如鼠標事件處理!)可能無法正常工作。

+1

好的,但是當我用相應的參數使用glutInit()函數時,我仍然得到相同的結果... – Morelka