CreateDibSection抛出访问冲突异常
CreateDibSection throws Access Violation Exception
我试图创建一个DIBSection,以便能够更快地渲染像素,因为SetPixel太慢了。现在,我试着像这样创建它:
void** imagePointer = NULL;
DWORD mask888[] = { 0xFF0000, 0x00FF00, 0x0000FF };
BITMAPINFO bitmapInfo = BITMAPINFO();
memset(&bitmapInfo, 0, sizeof(bitmapInfo));
memcpy(bitmapInfo.bmiColors, mask888, sizeof(mask888));
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfo.bmiHeader.biWidth = LCD_WIDTH; // 160
bitmapInfo.bmiHeader.biHeight = LCD_HEIGHT; // 144
bitmapInfo.bmiHeader.biPlanes = 1;
bitmapInfo.bmiHeader.biBitCount = 32;
bitmapInfo.bmiHeader.biCompression = BI_RGB;
bitmap = CreateDIBSection(hdc, &bitmapInfo, DIB_RGB_COLORS, imagePointer, NULL, 0);
但是发生的是,当执行CreateDIBSection调用时,我只是得到一个访问冲突异常抛出。
抛出的异常如下:
Exception thrown at 0x76E69623 (gdi32.dll) in Emulation.exe: 0xC0000005: Access violation writing location 0x0000FF00.
你能告诉我如何调试这个或如何解决这个问题吗?
提前非常感谢!
哎呀!您忘记阅读文档了
传递一个不指向任何东西的void**
,但是这个参数是:
ppvBits [out]
指向变量的指针,该变量接收指向DIB位值位置的指针。
当然,这个空指针将被解引用,导致未定义的行为(在您的情况下是访问冲突)。
将imagePointer
的地址传递给ppvBits:
BYTE* imagePointer = NULL;
...
bitmap = CreateDIBSection(hdc, &bitmapInfo, DIB_RGB_COLORS, (void**)&imagePointer, NULL, 0);
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 在C++中删除双向链表的头节点后出现访问冲突异常
- C++ 引发异常:访问冲突写入
- 未处理的异常..访问冲突写入位置
- 存储类对象的C++模板链表-未处理的异常访问冲突读取位置
- 读取位置/使用结构的矢量时发生未处理的异常访问冲突
- 未处理的异常:访问冲突读取位置
- 未捕获异常.访问冲突读取位置
- 未处理的异常 - 访问冲突读取位置0x00000000
- 使用函数指针C++异常:访问冲突执行位置0x00000000
- 赋值变量时c++未处理异常访问冲突
- 在c++中使用JNI时,c0000005异常(访问冲突)
- c++ std::cin未处理异常:访问冲突写入位置
- 使用 int 变量的 C++ 异常访问冲突
- 未处理的异常/访问冲突,只要我在变量上使用 OutputDebugStringW()
- 异常:访问冲突