Нарушение прав доступа с помощью malloc () и glDrawPixels ()? - PullRequest
1 голос
/ 09 апреля 2009

Кто-нибудь может увидеть, что не так с этим кодом?

Размер SIZE_BG составляет 6 МБ, поскольку я пытаюсь нарисовать большое растровое изображение (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);

1 Ответ

3 голосов
/ 09 апреля 2009

SIZE_BG составляет 6 МБ

3366 × 600 - приблизительно 1,92 миллиона пикселей
BRGA указывает 4 байта на пиксель
Итак, 3366 × 600 × 4 - чуть более 7,7 МБ

Следовательно, ваш буфер слишком мал ... glDrawPixels() будет считывать после конца в нераспределенную память.

...