递归可以泄漏记忆吗?

时间:2014-06-28 10:31:54

标签: c++ opencv

我正在开发一个真正需要内存管理的项目。事情就是当我调用一个递归函数时,我在任务管理器中看到已经占用了一个内存,并且在递归函数结束后,内存不会被释放。如果看一下影响内存的唯一因素就是int q必须​​在函数结束后返回给系统,并且调用函数不能占用任何内存。

注意:bin只是一个图像,而且是一个全局的二维数组,因此它们的内存使用量不大!

void inline helpbig(int y , int x)
    {
    int q;
    q = (int) CV_IMAGE_ELEM(bin,uchar,y,x);
    if (q==0)
        a[y][x]=-1;
    if (q==255 && a[y][x]!=1 && a[y][x]!=2)
    {
        max1+=1;
        a[y][x] = 1;
        if (y!=0)
        {
            if (a[y-1][x]==0)
                helpbig(y-1,x);
        }
        if (y!=bin->height-1)
        {
            if (a[y+1][x]==0)
                helpbig(y+1,x);
        }
        if (x!=bin->width-1)
        {
            if (a[y][x+1]==0)
                helpbig(y,x+1);
        }
        if (x!=0)
        {
            if (a[y][x-1]==0)
                helpbig(y,x-1);
        }
    }
}

注意:递归函数用于查找一起出现的点。

1 个答案:

答案 0 :(得分:1)

当您的程序尝试分配内存时,它会从其空闲内存池中获取内存。当它运行低时,它将从OS请求更多内存。但是,当您在程序中释放内存时,它将返回到程序的可用内存池,但在程序退出之前不会(通常)返回到操作系统。