Pregunta

Puede alguien ver lo que está mal con este código?

SIZE_BG es 6MB como estoy tratando de dibujar una imagen de mapa de bits grande (3366x600). Yo uso malloc para evitar que mi imagen se desborde la pila. Me aparece un error de acceso violación de la llamada a glDrawPixels (). bgPtr parece apuntar a la información correcta, como he comprobado los primeros bytes antes de llamar glDrawPixels y que son correctos.

    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);
¿Fue útil?

Solución

  

SIZE_BG es 6MB

3366 × 600 es aproximadamente 1,92 millones de píxeles
BRGA indica 4 bytes por píxel
así, 3366 × 600 × 4 es un poco más de 7.7MB

Por lo tanto, el búfer es demasiado pequeño ... glDrawPixels() se lee más allá del final en la memoria no asignada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top