gpt4 book ai didi

c++ - munmap_chunk(): 使用 opencv cv::Ptr 时出现无效指针错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:56 25 4
gpt4 key购买 nike

我正在编写我的第一个 opencv 代码(实际上是第一个 C++ 代码),当我尝试使用 cv::Ptr 时遇到了一个奇怪的 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 因此会导致崩溃,文档建议您需要使用允许您指定自己的删除器的构造函数:

// 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);

关于c++ - munmap_chunk(): 使用 opencv cv::Ptr 时出现无效指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30794681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com