Читать ошибку нарушения доступа при изменении значения указателя [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Читать ошибку нарушения доступа при изменении значения указателя [закрыто]

Сообщение Anonymous »

Я создал функцию для загрузки растрового изображения из моих ресурсов, а затем отредактировать заданный указатель текстур, чтобы сохранить для последующего: < /p>

Код: Выделить всё

bool WindowManager::LoadTextureFromResource(const int resourceNum, GLuint* texture)
{

HBITMAP hBmp = static_cast(
LoadImageW(GetModuleHandle(nullptr),
MAKEINTRESOURCEW(resourceNum),
IMAGE_BITMAP,
0, 0,
LR_CREATEDIBSECTION)
);
if (!hBmp) {
OutputDebugStringA("Failed to load bitmap resource ID ");
OutputDebugStringA(std::to_string(resourceNum).c_str());
OutputDebugStringA("\n");
return false;
}

// 2) Inspect its properties
BITMAP bmp;
GetObjectW(hBmp, sizeof(bmp), &bmp);
int width = bmp.bmWidth;
int height = bmp.bmHeight;
int bpp = bmp.bmBitsPixel;  // 24 or 32 usually

BITMAPINFOHEADER bi = {};
bi.biSize = sizeof(bi);
bi.biWidth = width;
bi.biHeight = -height;    // top-down DIB
bi.biPlanes = 1;
bi.biBitCount = static_cast(bpp);
bi.biCompression = BI_RGB;

// Allocate the pixel buffer
size_t pixelCount = size_t(width) * size_t(height);
std::vector pixels;
pixels.resize(pixelCount * (bpp / 8));

HDC hdc = GetDC(nullptr);
GetDIBits(hdc, hBmp, 0, height, pixels.data(),
reinterpret_cast(&bi), DIB_RGB_COLORS);
ReleaseDC(nullptr, hdc);
DeleteObject(hBmp);

// 3) Upload to OpenGL
GLuint tex = 0;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

// Ensure no row-alignment issues
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

GLenum glFormat = (bpp == 32) ? GL_BGRA : GL_BGR;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height,
0, glFormat, GL_UNSIGNED_BYTE, pixels.data());

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glBindTexture(GL_TEXTURE_2D, 0);

*texture = tex;

if (pixels.empty()) return false;
if (tex == 0) return false;
return true;
}
< /code>
У меня проблема, когда я редактирую значение указателя (*texture = tex;
) Я получаю:

Код: Выделить всё

Exception thrown: read access violation. _Val was 0xFFFFFFFFFFFFFFFF.
Я инициализирую введенный указатель текстур, поэтому я не могу видеть, что может вызвать это
Я попытался изменить функцию, чтобы она вернула значение глюки (в случае плохого использования указателя), но это приводит к точно такой же ошибке, эта проблема с загрузкой моего изображения или где -то еще?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... of-pointer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»