C 当函数调用过多时,静态变量会导致问题吗?

C 当函数调用过多时,静态变量会导致问题吗?,c,C,我试着做一个画正方形的函数,但我想递归地做,所以我使用了一个静态变量,一个问题:当我向它传递太高的参数时,我的函数seg会出错,所以我问你这是因为静态还是其他原因,谢谢你的帮助,下面是代码: int square(int x, int y) { static t_coord pos; if (x < 0 || y < 0) { ft_puts(2, "Error"); // if the size is negative it di

我试着做一个画正方形的函数,但我想递归地做,所以我使用了一个静态变量,一个问题:当我向它传递太高的参数时,我的函数seg会出错,所以我问你这是因为静态还是其他原因,谢谢你的帮助,下面是代码:

int     square(int x, int y)
{
    static t_coord  pos;

    if (x < 0 || y < 0)
    {
        ft_puts(2, "Error"); // if the size is negative it displays error on stderr
        return (FAILURE);
    }
    if (!pos.y)
        pos.y++;
    if (pos.x == x)
    {
        if (pos.y == y)
            return (SUCCESS);
        pos.y++;
        pos.x = 1;
        write(1, "\n", 1);
    }
    else
        pos.x++;
    ft_write_case(pos.x, pos.y, x, y); // function to write either corner side or space (middle)
    return(square(x, y));
}
intsquare(intx,inty)
{
静态t_坐标位置;
if(x<0 | | y<0)
{
ft_put(2,“Error”);//如果大小为负数,则在stderr上显示Error
返回(失败);
}
如果(!位置y)
pos.y++;
如果(位置x==x)
{
如果(位置y==y)
返回(成功);
pos.y++;
位置x=1;
写入(1,“\n”,1);
}
其他的
pos.x++;
ft_write_case(pos.x,pos.y,x,y);//用于写入角边或空格(中间)的函数
返回(平方(x,y));
}

这个问题不是来自我的ft_write_case函数,因为我用一个简单的write(1,“o”,1)替换了它,并且它也出现了相同的分段错误,感谢帮助

它不是
静态
变量。只有一个
静态变量的副本。您正在使用
x
y
变量以及其他后台堆栈用法溢出堆栈。当您递归调用函数时,递归调用应该会使您更接近基本情况。您使用相同的
x
y
值进行递归,因此它永远不会停止递归,并且会出现堆栈溢出。@Barmar虽然
x
y
值在调用之间不会改变,
pos.x
pos.y
值会改变,因此应该结束递归。“u”我想递归执行,所以我使用的是一个静态变量,u”是一个非序列,一个不跟随另一个。递归通常是不明智的,在这种情况下可能根本不合适。对于1000x1000,递归深度为1000000,每个递归可能在64位系统上使用16字节的堆栈(两个int参数和返回地址)大约16Mb——这比Linux或Windows的默认进程堆栈要多。