malloc() 和 glDrawPixels() 的访问冲突?

Posted

技术标签:

【中文标题】malloc() 和 glDrawPixels() 的访问冲突?【英文标题】:Access violation with malloc() and glDrawPixels()? 【发布时间】:2009-04-09 05:12:16 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

SIZE_BG 为 6MB

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

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

【讨论】:

@sharptooth:似乎修订版 cmets 被破坏了,但我想我知道你现在编辑该去哪里了......

以上是关于malloc() 和 glDrawPixels() 的访问冲突?的主要内容,如果未能解决你的问题,请参考以下文章

如何缩放 glDrawPixels?

glDrawPixels 访问冲突读取位置

使用 glDrawPixels() 在 OpenGL 上绘制像素

glDrawPixels() 与 0.375 翻译

灰度的glDrawPixels?

没有 GL_COLOR_INDEX 的 glBitmap()