我尝试使用visual studio在C ++中使用示例。
void egg();
void chicken ()
{
return egg ();
}
void egg ()
{
return chicken ();
}
int _tmain(int argc, _TCHAR* argv[])
{
chicken();
return 0;
}
运行时遇到堆栈溢出异常错误。 可以请任何人解释我为什么会出现这样的错误。我假设这将是无限循环。
答案 0 :(得分:1)
每次chicken ()
来电egg()
和egg()
来电chicken ()
时,他们的return
地址都会被推送到the stack。由于堆栈是有限内存,因此您会收到“像 stackoverflow异常”这样的错误。
阅读this以获得更多理解。
答案 1 :(得分:1)
你所拥有的是无限循环。
这可以写成
void chicken ()
{
return chicken();
}
您正在递归调用函数chicken()
,函数中没有退出条件。所有递归函数都应该有退出条件,否则你的堆栈内存不足,最终你会遇到stackoverflow
答案 2 :(得分:0)
这样想,你拨打<span class="likebtn-wrapper" data-identifier="likeButton1" datatheme="ugreen"></span><script>(function(d,e,s){if(d.getElementById("likebtn_wjs"))return;a=d.createElement(e);m=d.getElementsByTagName(e)[0];a.async=1;a.id="likebtn_wjs";a.src=s;m.parentNode.insertBefore(a, m)})(document,"script","//w.likebtn.com/js/w/widget.js");</script>
,然后拨打chicken()
,拨打egg()
,然后拨打chicken()
,依此类推。它会导致一个非有限的循环。在一定量的迭代之后,这会导致溢出,因为函数调用使用堆栈中的资源,这不是无限的,并且函数调用将保留在堆栈上,直到程序结束或满足其他终止条件。