加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – free cv :: Mat,不释放内存

发布时间:2020-12-16 10:20:19 所属栏目:百科 来源:网络整理
导读:我将Mat数据(不是cv :: Mat对象)传递给函数,并使此函数成为此数据的新所有者.但是,我需要一个方法来释放原始对象,而不释放它指向的数据缓冲区. 我知道这将发生在从外部数据创建的cv :: Mat中,我只需要将此功能用于通用cv :: Mat. 有没有办法做到这一点? 解
我将Mat数据(不是cv :: Mat对象)传递给函数,并使此函数成为此数据的新所有者.但是,我需要一个方法来释放原始对象,而不释放它指向的数据缓冲区.

我知道这将发生在从外部数据创建的cv :: Mat中,我只需要将此功能用于通用cv :: Mat.

有没有办法做到这一点?

解决方法

您可以使用addref()方法,但是会有内存泄漏.

实际上从Mat分离数据不是一个好主意:

>它不是为此设计的;
>您无法保证从通用cv :: Mat获得的指针指向已分配内存块的开头;
>很可能你自己无法释放那个内存,因为cv :: Mat可能会使用自己的内存分配例程(有很多理由这样做,例如对齐).
>即使您找到了解决数据指针所有问题的方法,您仍然无法避免Mat引用计数器的内存泄漏.

因此,只有两种方式可以保证Mat支持:

>在Mat创建上提供指针;
>将数据复制到缓冲区.

即使它在当前版本中工作,在未来的版本中也可以打破任何其他方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读