我是否必须在C 接口的OPENCV C包装器中自由分配的内存
Do I have to free memory allocated by New in a Opencv C wrapper for the C++ interface
我正在为C OpenCV函数编写C包装器,这是我做过的
Mat* cv_create_ones(int rows, int cols, int type) {
return new Mat(Mat::ones(rows, cols, type));
}
在大多数包装纸中,我都会通过首先致电新的新包装。我想知道我是否必须释放新的包装中的新数据,然后将其完成后的包装器中的删除...如果有这样的方法可以将DELETE纳入上述包装器,以便在函数为时自动称为自动称为完成了使用...就像每次被称为它会创建新的,被使用,然后调用删除...仅在再次访问时再次调用新调用。...不,这是行不通的,因为如果我将数据存储在新的指针将被删除,对吗?我谷歌搜索了如何做到这一点,但我什么也没找到。专业人士对此的任何建议将不胜感激。
编辑Dima Maligin
我尝试了以下和Juanchopanza的变化,但出现错误
Mat* cv_create_zeros(int rows, int cols, int type) {
Mat m(Mat::ones(rows, cols, type)); return &m;;
}
特别是我得到
警告:返回本地变量" M"的地址
我谷歌搜索了,在这种情况下,使用malloc进行了提议,但随后需要释放...因此,如果您知道解决方法,我会很感激。我正在为Arjun comars opencv在github上添加新功能,它准备与主体合并,其添加是为C 代码自动化C包装器,因此没有C FFI的语言可以包装OPENCV C 功能。一个例子是在github https://github.com/arjuncomar/opencv/blob/master/modules/c/src/mat.cpp...i希望有人可以查看链接,这是一些是一些,这是一些,包装器和大多数人确实使用"新",没有它不会编译,并告诉我是否使用它们,我应该安排记忆以后释放...如果您可以将他的代码的意图神圣,给我建议,我会很感激...
1-您无法创建本地变量并返回引用或指针
因此:
Mat* cv_create_zeros(int rows, int cols, int type) {
Mat m(Mat::ones(rows, cols, type)); return &m;;
}
是非法的。您将指针返回到已删除的对象。
2-您所做的任何new
,都必须delete
。
因此,如果调用:
Mat* cv_create_ones(int rows, int cols, int type) {
return new Mat(Mat::ones(rows, cols, type));
}
必须使用delete
删除指针。由于您编写了C包装器,并且无法使用delete
,因此应该添加delete_mat
功能。
void delete_mat(Mat* m)
{
delete m;
}
编辑
由于delete
并不意味着要释放内存,因此也意味着调用destructor,您需要删除的每种类型删除功能虚拟Destructur。
您不需要需要为每个函数添加一个delete函数使用new
,您只需要每个 type 。
如果您有2个(或更多)功能:
Mat* cv_create_ones(...){
return new Mat(Mat::ones(...));
}
Mat* cv_create_zeroes(...){
return new Mat(Mat::zeroes(...));
}
您只需要一个delete
功能即可删除垫子指针:
void delete_mat(Mat* m)
{
delete m;
}
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 如何在函数中分配的自由记忆
- 我是否必须在C 接口的OPENCV C包装器中自由分配的内存
- C++内存分配/释放和自由空间错误
- 为什么标准允许我在没有析构函数的情况下自由存储分配类
- 用于跨线程分配和自由的良好分配器
- 函数传递值和自由分配
- 将基类指针分配给在自由存储中创建的派生类对象
- 在指针的重新分配的指针上,C++自由崩溃
- 双自由,没有任何动态内存分配