c++ 将原始数组指针转换为unique_ptr

iqih9akk  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(208)

我在使用unique_ptr时遇到了问题。我正在尝试使用winapi,我成功地从一个位图与CreateDIBSection()得到像素。
要获得像素,我们必须创建一个BYTE* 值并将其传递给函数,如下所示:

  1. BYTE* bitPointer;
  2. HBITMAP hBitmap2 = CreateDIBSection(hdcTemp, &bitmap, DIB_RGB_COLORS, (void**)(&bitPointer), NULL, NULL);

bitPointer现在有1080 * 1920 *(每像素4字节)= 8,294,400个值。
要将它转换为unique_ptr,我做:

  1. std::unique_ptr<BYTE> bitSmartPtr(bitPointer);

但是当我尝试访问值时:

  1. std::cout << bitSmartPtr.get()[0] << '\n';

我有错误“分段错误”。
我试着用

  1. std::unique_ptr<BYTE[]> bitSmartPtr(bitPointer)

但是我不能访问它与bitSmartPtr[0]我得到相同的错误。
你知道我做错了什么吗?我该如何转换它?我补充说,我不认为我可以在CreateDIBSection()函数中使用除原始指针之外的其他变量。
当然,我可以通过for循环轻松访问第一个指针中的所有值

wxclj1h5

wxclj1h51#

创建std::unique_ptr意味着您拥有内存的所有权,但这里不能。
CreateDIBSection doc解释了如何管理内存。您唯一法律的的选择是使用DeleteObject(),您一定不要忘记在CreateDIBSection返回的句柄上这样做。
但请仔细阅读文档(和下面的评论)。

相关问题