2009-04-09 60 views
1

任何人都可以看到這段代碼有什麼問題嗎?與malloc()和glDrawPixels()訪問衝突?

SIZE_BG是6MB,因爲我試圖繪製一個大的位圖圖像(3366x600)。我使用malloc來防止我的圖像溢出堆棧。我在調用glDrawPixels()時遇到訪問衝突錯誤。 bgPtr似乎指向正確的數據,因爲我在調用glDrawPixels之前檢查了前幾個字節,它們是正確的。

bgPtr = (char*)malloc(SIZE_BG); 
    fstream inFile(texFileName, ios::in | ios::binary); 
    inFile.read(bgPtr, SIZE_BG); 
    inFile.close(); 

//... other code 

    glDrawPixels(3366, 600, GL_BGRA_EXT, GL_UNSIGNED_BYTE, bgPtr+54); 

回答

3

SIZE_BG是6MB

3366×600爲約192萬個像素
BRGA表示每像素4個字節
所以,3366×600×4是剛剛超過7.7MB

因此,你的緩衝區太小了...... glDrawPixels()會將最後讀入未分配的內存中。

+0

非常真實。謝謝! – 2009-04-09 05:23:45