2010-07-10 14 views
0

當我遇到一個非常奇怪的現象與數組時,我正在用glaux庫加載openGl中的圖像。下面是我嘗試過的一些例子,以及它們是否成功。 curFreeId變量是全局變量。我創建的用於測試的額外變量對於函數是局部的。爲什麼這個陣列選擇會導致這樣一個不好的現象?

從何時起,這會影響代碼流。

unsigned int curFreeId = 0; 
    modStruct->t[ i ].gluId = curFreeId; 
    glGenTextures(1, &glTextureList[curFreeId]); 
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]); 

VS

modStruct->t[ i ].gluId = 0; 
    glGenTextures(1, &glTextureList[0]); 
    glBindTexture(GL_TEXTURE_2D, glTextureList[0]); 

第一個代碼將無法正常工作。第二個意志。有沒有人有任何線索爲什麼發生這種情況?

編輯:奇怪的是,這也正常工作。

unsigned int curFreeId = 0; 
modStruct->t[ i ].gluId = curFreeId; 
glGenTextures(1, &glTextureList[0]); 
glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]); 

這樣做。

unsigned int curFreeId = 0; 
modStruct->t[ i ].gluId = curFreeId; 
glGenTextures(1, &glTextureList[curFreeId]); 
glBindTexture(GL_TEXTURE_2D, glTextureList[0]); 

繼續進行一些測試。我遇到了更加奇怪的結果。

這工作

unsigned int curFreeId = 0; 
    unsigned int curid = 0; 
    modStruct->t[ i ].gluId = curFreeId; 
    glGenTextures(1, &glTextureList[curid]); 
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]); 

但這並不...

unsigned int curFreeId = 0; 
    unsigned int curid = curFreeId; 
    modStruct->t[ i ].gluId = curFreeId; 
    glGenTextures(1, &glTextureList[curid]); 
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]); 

但這...

unsigned int curFreeId = 0; 
    unsigned int curid = curFreeId = 0; 
    modStruct->t[ i ].gluId = curFreeId; 
    glGenTextures(1, &glTextureList[curid]); 
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]); 

這個世界是什麼......這是一些某種故障?

+0

發佈您的整個代碼。你的應用程序是多線程的嗎?多次運行相同的代碼時,你會得到不一致的結果嗎? – 2010-07-10 02:49:41

+0

並且用什麼編譯器?是否進行優化?是否有可能遍歷生成的彙編代碼? – 2010-07-10 03:02:27

+0

很可能你已經在某處覆蓋了一些未分配的內存,但沒有更多的代碼很難找出問題。 – 5ound 2010-07-10 03:05:24

回答

0

好吧...我只是通過整個項目尋找所有關係curFreeId。我設法找到了一個隨機的加號。

curFreeId++; 

我討厭簡單的Bug ......

感謝您的幫助球員。由於您的建議,我設法修復了其他一些錯誤。

相關問題