violação de acesso com malloc () e glDrawPixels ()?
-
06-09-2019 - |
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);
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