我在使用unique_ptr
时遇到了问题。我正在尝试使用winapi,我成功地从一个位图与CreateDIBSection()
得到像素。
要获得像素,我们必须创建一个BYTE* 值并将其传递给函数,如下所示:
BYTE* bitPointer;
HBITMAP hBitmap2 = CreateDIBSection(hdcTemp, &bitmap, DIB_RGB_COLORS, (void**)(&bitPointer), NULL, NULL);
bitPointer现在有1080 * 1920 *(每像素4字节)= 8,294,400个值。
要将它转换为unique_ptr,我做:
std::unique_ptr<BYTE> bitSmartPtr(bitPointer);
但是当我尝试访问值时:
std::cout << bitSmartPtr.get()[0] << '\n';
我有错误“分段错误”。
我试着用
std::unique_ptr<BYTE[]> bitSmartPtr(bitPointer)
但是我不能访问它与bitSmartPtr[0]
我得到相同的错误。
你知道我做错了什么吗?我该如何转换它?我补充说,我不认为我可以在CreateDIBSection()
函数中使用除原始指针之外的其他变量。
当然,我可以通过for循环轻松访问第一个指针中的所有值
1条答案
按热度按时间wxclj1h51#
创建
std::unique_ptr
意味着您拥有内存的所有权,但这里不能。CreateDIBSection doc解释了如何管理内存。您唯一法律的的选择是使用
DeleteObject()
,您一定不要忘记在CreateDIBSection
返回的句柄上这样做。但请仔细阅读文档(和下面的评论)。