2009-04-09 9 views
1

誰でもこのコードの何が間違っているのを見ることができますか?malloc()およびglDrawPixels()によるアクセス違反ですか?

大きなビットマップイメージ(3366x600)を描画しようとしているため、SIZE_BGは6MBです。私は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は、約192万画素
BRGAが600×4×3366のわずか7.7メガバイト

ので、画素
当たり4つのバイトを示している600×6メガバイト

3366であります

したがって、あなたのバッファは小さすぎます... glDrawPixels()は未割り当てのメモリに最後よりも先に読み込まれます。

+0

非常に真です。ありがとう! –

+0

@sharptooth:リビジョンコメントが破棄されているようですが、今どこで編集しているのか分かります – Shog9

関連する問題