2009-04-09 84 views
1

任何人都可以看到这段代码有什么问题吗?与malloc()和glDrawPixels()访问冲突?

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

回答

3

SIZE_BG是6MB

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

因此,你的缓冲区太小了...... glDrawPixels()会将最后读入未分配的内存中。

+0

非常真实。谢谢! – 2009-04-09 05:23:45