【问题标题】:release memory opencv释放内存 opencv
【发布时间】:2012-01-25 09:30:06
【问题描述】:

我已经发布了一些关于释放所有IplImage 和所有CvMat 结构和CvMemStorage 的帖子,但我仍然有一些内存问题。

我还必须释放CvPointCvScalarCvPoint*(3 个 CvPoints 的数组,我是否也必须释放每个元素?)

如果我必须释放所有这些东西,我该怎么做?我没有找到任何功能这样做。我在 C/C++ 中使用 OpenCV 2.1。

我是这样声明它们的:

CvScalar b1;
CvScalar f;
float *data=(float*)resd->imageData; (need to release data)
CvPoint *point;
CvPoint pt;
CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));   

【问题讨论】:

    标签: c++ c opencv memory-leaks


    【解决方案1】:

    这个问题比 OpenCV 更与 C 相关。例如,这些:

    CvScalar b1;
    CvScalar f;
    CvPoint pt;
    

    是局部变量,因此当它们所属的作用域{ }完成执行时,它们会自动释放。

    这个:

    CvPoint *point;
    

    是一个指针,同时也是一个局部变量。你不应该deletefree() 它,因为你没有通过newmalloc() 为它分配任何内存。这样做会导致您出现问题(可能会导致崩溃)。

    但另一方面data

    float *data = (float*)resd->imageData;
    

    是保存内存块的指针和局部变量。但是,在这种特定情况下delete[] data;free(data) 是不明智的,因为您没有直接分配此内存。很明显,该内存是作为resd 的一部分分配的,这意味着您必须检查代码并找出变量resd 是如何声明/初始化的,然后执行适当的过程来释放它。由于我对 OpenCV 知之甚少,我可以说resdIplImage*。如果您使用cvCreateImage() 创建此变量,那么您的工作也是使用cvReleaseImage() 释放它。

    最后:

    CvPoint* ptsCorner=(CvPoint*) malloc(3*sizeof(ptsCorner[0]));  
    

    这是动态内存分配的典型情况,您可以在其中专门分配一定数量的内存。由于ptsCorner 是一个局部变量和一个指针,当它所属的作用域完成执行时,您将失去对该内存块的引用,它只会丢失在您的 RAM 中,从而占用内存空间并导致泄漏。这种情况下不用说必须执行free()来释放内存。

    【讨论】:

      【解决方案2】:

      如果您使用 new 初始化 CVPoint 结构,那么是的,您需要调用 delete(如果是数组,则需要调用 delete[] ) 以避免内存泄漏。

      如果不是,那么当函数超出范围时,变量将被自动销毁。

      如果你发布你的代码,那么它会更容易看到。

      【讨论】:

      • 添加声明,所有代码都很长,但我想现在更清楚了,顺便说一句,我没有使用 new 所以我想我必须释放 float *data(我尝试使用 delete但我得到一个运行时错误)和 *ptsCorner
      • 使用 malloc 的地方需要使用 free() 来回收内存。如果它是一个数组,请小心,因为您需要在数组的每个成员上调用 free() 。大量关于如何做到这一点的教程
      【解决方案3】:

      我认为解决问题的最佳方法是阅读关于指针的好教程。

      这是一个http://www.cplusplus.com/doc/tutorial/pointers/

      你说的OpenCV有问题,其实是对编程语言缺乏了解。所以,从基础开始,继续!

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2014-01-07
        • 2016-05-08
        • 2012-11-12
        • 2017-07-06
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多