Pergunta

Alguém pode ver o que há de errado com esse código?

SIZE_BG é 6MB como eu estou tentando desenhar uma imagem bitmap grande (3366x600). Eu uso malloc para impedir que a minha imagem de transbordar a pilha. Eu recebo um erro de violação de acesso na chamada para glDrawPixels (). bgPtr parece apontar para os dados corretos como eu verifiquei os primeiros bytes antes de chamar glDrawPixels e eles estão corretos.

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

Solução

SIZE_BG é 6MB

3366 × 600 é de aproximadamente 1,92 milhões de pixels
BRGA indica 4 bytes por pixel
assim, 3366 × 600 × 4 é um pouco mais 7,7MB

Portanto, o buffer é muito pequeno ... glDrawPixels() irá ler além do fim para a memória não alocado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top