分配OpenCV Mat对象会导致内存泄漏
Assigning OpenCV Mat object causes a memory leak
我想将frame (Mat
对象)从函数参数分配给对象变量,如下面的代码所示。这个函数应该被调用5次(对于来自摄像机的每一帧),但是这一行
this->nFrame = frame;
导致内存泄漏(当注释时没有错误!)。
注意函数setCurrentFrame
在JNI
函数内部被调用,其中JNI
函数在每次我想处理来自摄像机的帧时被调用。
JNI
函数如下:
JNIEXPORT jbyteArray JNICALL Java_com_adhamenaya_Native_run(JNIEnv * env,
jobject obj, jstring faceCascadeFile, jstring noseCascadeFile,
jstring landmarks, jlong frame) {
MyClass gsys;
cv::Mat& inFrame = *(cv::Mat*) frame;
gsys.setCurrentFrame(inFrame);
// SOME PROCESSING FOR THE FRAME
inFrame.release();
gsys.release();
......
......
}
c++函数(setCurrentFrame)
的代码void MyClass::setCurrentFrame(cv::Mat& frame) {
cv::Size2d imgRes;
float resRatio;
if (frame.cols > frame.rows) {
//landscape
imgRes.width = 640.0f;
resRatio = frame.cols / 640.0f;
imgRes.height = floor(frame.rows / resRatio);
} else {
//portrait
imgRes.height = 640.0f;
resRatio = frame.rows / 640.0f;
imgRes.width = floor(frame.cols / resRatio);
}
//save scaled height, width for further use
this->frameWidth = nFrame.cols;
this->frameHeight = nFrame.rows;
//set frame and increment frameCount
this->nFrame = frame;
this->frameCount++;
}
劳驾,你能帮我解决这个问题吗?我试图通过调用:
释放框架void MyClass::release(void) {
this->nFrame = cv::Mat();
}
什么也没发生,甚至像这样:
void MyClass::release(void) {
this->nFrame.release();
}
还是同样的错误!
编辑
MyClass.h
class MyClass {
public:
cv::Mat nFrame;
MyClass ();
~MyClass ();
void release (void);
void setCurrentFrame(cv::Mat& frame);
};
在jni文件中,释放框架对象的顺序可能是错误的:
inFrame.release();
gsys.release();
应为
gsys.release();
inFrame.release();
因为当你释放源帧时,gsys中的帧引用无效
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏