小编Jus*_*ste的帖子

在这种情况下,无限递归调用应该引发堆栈溢出?

我最近想过这种堆栈溢出的情况:

int f()  
{  
    return f();  
}  

int main(void)  
{  
    f();  
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

这肯定会导致程序崩溃.但我的问题是为什么这与无限循环不一样?在返回行的递归调用的情况下,编译器可以意识到不需要保留调用函数的任何信息,因为被调用函数的返回点与调用者的返回点相同.现在,在这种情况下,我同意编译器需要保留在堆栈中进行调用的函数的信息:

int f()
{
    int x = f();
    return x;
}

int main(void)
{
    f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,我错过了一些东西,如果有人向我解释,我会很感激.问候

c stack-overflow recursion

3
推荐指数
1
解决办法
1072
查看次数

标签 统计

c ×1

recursion ×1

stack-overflow ×1