【发布时间】:2021-11-05 01:44:32
【问题描述】:
我正在开发一个图像处理应用程序。
总之,我有一个存储图像数据的字节缓冲区,所以我可以使用这个数组在 wx 小部件和 OpenCV 中轻松处理图像。我计划将此字节缓冲区存储在 shared_ptr 中,因为它将在执行过程中用于同一类的其他实例。
使用原始指针它可以正常工作,但是每当我尝试使用 shared_ptr 时,只要将此指针传递给函数,就会出现分段错误。
如何在没有分段错误的情况下将其传递给该函数?这个崩溃对我来说没有意义
问题在这里
_dataSize = (size_t)len;
_originalData = std::make_shared<void*>(malloc(_dataSize));
if ( file.Read(_originalData.get(), _dataSize) != len )
在上面代码的最后一行,我试图将 _original 数据指针传递给读取函数
这是full code,在上面的部分中,我只是写了错误正在发生的那一行。在完整的代码中,错误位于第 18 行的 src/Img.cpp 文件中
谢谢
【问题讨论】:
-
你没有在传递给
make_shared的参数中进行分配。见stackoverflow.com/questions/20895648/… -
如果你传递
malloc生成的指针,你必须传递一个调用free的删除器。 -
您真的想要共享
void*的所有权,还是想要共享void*指向的对象的所有权? -
make_shared<T>(arguments)从arguments创建一个T类型的新共享对象。shared_ptr<T>(p)拥有p指向的对象的所有权。 -
在这种情况下,我希望在运行时共享所有权,它将将此缓冲区复制到其他 Img 对象
标签: c++ c++17 shared-ptr smart-pointers