2009-04-09 3 views
1

Quelqu'un peut-il voir ce qui ne va pas avec ce code?Violation d'accès avec malloc() et glDrawPixels()?

SIZE_BG est 6 Mo comme j'essaye de dessiner une grande image bitmap (3366x600). J'utilise malloc pour empêcher mon image de déborder de la pile. Je reçois une erreur de violation d'accès lors de l'appel de glDrawPixels(). bgPtr semble pointer vers les données correctes car j'ai vérifié les premiers octets avant d'appeler glDrawPixels et ils sont corrects.

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

Répondre

3

SIZE_BG est 6MB

3366 × 600 est d'environ 1,92 millions de pixels
BRGA indique 4 octets par pixel de sorte que
, 3366 × 600 × 4 est un peu plus 7.7MB

Par conséquent, votre tampon est trop petit ... glDrawPixels() lira après la fin dans la mémoire non allouée.

+0

Très vrai. Merci! –

+0

@sharptooth: semble que les commentaires de révision sont cassés, mais je pense que je vois où vous alliez avec cette modification maintenant ... – Shog9

Questions connexes