Как я могу удалить объект cv::Mat из памяти

Хранение объекта cv::mat вызывает утечку памяти. Как убрать мат из памяти. Кажется, cv::Mat.realease() не работает.

МойКласс.h

class MyClass {

public:
    cv::Mat nFrame;
    cv::Mat pGrayFrame;
    cv::Mat nGrayFrame;

    MyClass ();                     
    void     setCurrentFrame(cv::Mat& frame);
  } 
};

MyClass.cpp

MyClass::MyClass(void) {

}


void MyClass::setCurrentFrame(cv::Mat& frame) {
    //set frame and increment frameCount
    this->nFrame = frame;
    this->frameCount++;
}


void MyClass::saveCurrentFrame() {
    this->pGrayFrame = this->nGrayFrame;
}

эта строка вызывает утечку памяти:

this->nFrame = frame;

где setCurrentFrame вызывается в функции jni С++


person Adham Enaya    schedule 20.10.2015    source источник
comment
Пожалуйста, покажите код, как вы выделили объект cv::mat.   -  person nv3    schedule 20.10.2015
comment
См. эту страницу: answers.opencv.org/question /14285/   -  person Itay    schedule 20.10.2015
comment
Пожалуйста, объясните, каким образом cv::Mat вызывает утечку памяти. 'cv::Mat.release()' не освобождает память, только если она была выделена извне или если другие 'Mat' содержат ссылки на эту память.   -  person anderas    schedule 20.10.2015
comment
@anderas Я обновил вопрос с кодом. Да мат выделяется снаружи   -  person Adham Enaya    schedule 20.10.2015
comment
@nv3 Пожалуйста, проверьте обновление кода.   -  person Adham Enaya    schedule 20.10.2015
comment
Вам нужно удалить данные, которые могут быть в указателе this->nFrame, прежде чем заменять их с помощью присваивания. (при использовании внешних данных)   -  person Rollen    schedule 20.10.2015
comment
Пожалуйста, как удалить эти данные? @RollenD'Souza   -  person Adham Enaya    schedule 20.10.2015
comment
поясняю мой предыдущий комментарий: когда мы имеем в виду «выделено извне», мы имеем в виду использование этого "nofollow noreferrer">конструктор. Был ли этот объект построен таким образом?   -  person Rollen    schedule 20.10.2015
comment
@RollenD'Souza не объект передается в качестве параметра, где JNI вызывается из java, передавая объект Mat следующим образом.. JNIEXPORT jbyteArray JNICALL Java_com_adhamenaya_Native_run(JNIEnv * env, jobject obj, jlong frame) { cv::Mat& inFrame = *(cv::Mat*) frame;} @RollenD'Souza   -  person Adham Enaya    schedule 20.10.2015
comment
Хорошо. В этом случае объект частично управляется Java, что важно. см. здесь; хотя ваш случай может быть не таким серьезным, он определенно имеет значение.   -  person Rollen    schedule 20.10.2015
comment
@ RollenD'Souza Я так не думаю, потому что, когда я прокомментировал эту строку, утечка памяти исчезла.   -  person Adham Enaya    schedule 20.10.2015
comment
Давайте продолжим обсуждение в чате.   -  person Rollen    schedule 20.10.2015