递归会泄漏内存吗?

can recursion be leaking memory?

本文关键字:内存 泄漏 递归      更新时间:2023-10-16

我正在做一个非常需要内存管理的项目。问题是,当我调用递归函数时,我在任务管理器中看到内存被占用,递归函数结束后,内存没有被释放。如果你仔细观察,唯一影响内存的是int q,它必须在函数结束后返回给系统,并且调用函数不能占用任何内存。

注意:bin只是一个图像和a是一个二维数组,是全局的,所以没有太多的内存使用从他们!

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);
        }
    }
}

注:递归函数用于寻找一些在一起的点。

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