相互调用函数导致计算器溢出错误

Calling functions from each other causing stackoverflow error

我用 visual studio 在 C++ 中尝试了以下示例。

void egg();

void chicken () 
{
    return egg ();
}

void egg () 
{
    return chicken ();
}

int _tmain(int argc, _TCHAR* argv[])
{
    chicken();
    return 0;
}

虽然 运行 我遇到了类似 Whosebug 异常的错误。 任何人都可以解释一下为什么会出现这样的错误。我假设这将无限循环。

这样想,你调用chicken(),然后你调用egg(),它又调用chicken(),然后是egg(),依此类推。它会导致非有限循环。这会导致一定数量的迭代后溢出,因为函数调用使用堆栈中的资源,这不是无限的,并且函数调用将保留在堆栈中,直到程序结束或满足其他终止条件。

每次您的 chicken () 调用 egg()egg() 调用 chicken () 时,它们的 return 地址都会被推送到 the stack。由于堆栈是有限内存,因此您得到 "error like Whosebug exception"。

阅读 this 以获得更多理解。

这里是无限循环。

这可以写成

void chicken () 
{
    return chicken();
}

您正在递归调用函数 chicken(),并且函数中没有退出条件。所有递归函数都应该有退出条件,否则你 运行 堆栈内存不足,最终你会命中