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

我正在尝试绘制大的位图图像(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);

最佳答案



3366×600约为192万像素
BRGA表示每个像素4个字节
因此,3366×600×4刚好超过7.7MB

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

07-24 09:24