1

このコードの何が問題なのか誰にもわかりますか?

大きなビットマップ画像 (3366x600) を描画しようとしているので、SIZE_BG は 6MB です。イメージがスタックからオーバーフローするのを防ぐために、malloc を使用します。glDrawPixels() の呼び出しでアクセス違反エラーが発生します。glDrawPixels を呼び出す前に最初の数バイトをチェックしたため、bgPtr は正しいデータを指しているようで、正しいデータです。

    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);
4

1 に答える 1

3

SIZE_BG は 6MB

3366 × 600 は約 192 万ピクセル
BRGA は 1 ピクセルあたり 4 バイトを示す
ため、3366 × 600 × 4 は 7.7 MB をわずかに上回ります

したがって、バッファが小さすぎます...glDrawPixels()最後を過ぎて未割り当てメモリに読み込まれます。

于 2009-04-09T05:19:15.407 に答える