munmap_chunk(): 使用 openCV CV::P tr 的指针错误无效
munmap_chunk(): invalid pointer error using opencv cv::Ptr
我正在编写我的第一个opencv代码(实际上是第一个C++代码),当我尝试使用cv::P tr时遇到了一个奇怪的munmap_chunk(): invalid pointer
错误。我在其他帖子中看到,这通常是由于释放了已经释放的区域而导致的,但我认为我没有。
以下简单的测试函数将生成该错误。
void testing(void) {
int i=2;
Ptr< Mat > pointer=new Mat[i];
}
从调试器来看,析构函数似乎在函数返回时触发了错误。我不知道为什么,因为基本上我对 ptr 什么也没做。那么为什么会发生这种情况,正确的用法是什么?
提前谢谢。
在C++中,分配new
的内存与分配new []
的内存之间存在显着差异。
int* p = new int;
delete p;
p = new int[8];
delete p; // error/crash
delete [] p; // correct
Ptr 类是一个 RAII 容器,用于管理指针的所有权。当您分配给它时,它将获得该分配的所有权,这意味着当 Ptr 超出范围时(在本例中为函数末尾),它将delete
它。
默认情况下,它使用delete
,因此您的崩溃,文档建议您将需要使用允许您指定自己的删除器的构造函数:
// see http://docs.opencv.org/master/d0/de7/structcv_1_1Ptr.html
void array_deleter(Mat* m)
{
delete [] m;
}
Prt<Mat> ptr(new Mat[i], array_deleter);
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- munmap_chunk(): 使用 openCV CV::P tr 的指针错误无效