1

谁能看到这段代码有什么问题?

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

1 回答 1

3

SIZE_BG 为 6MB

3366 × 600 大约是 192 万像素
BRGA 表示每像素 4 字节,
所以 3366 × 600 × 4 刚好超过 7.7MB

因此,您的缓冲区太小......glDrawPixels()将读到末尾到未分配的内存中。

于 2009-04-09T05:19:15.407 回答