什么是StackOverflowError?

问题:

什么是StackOverflowError,是什么原因,以及我应该如何处理?

回答:

参数和局部变量在堆栈上分配(引用类型为对象存在于堆上,变量引用该对象)。堆栈通常位于地址空间的上端,并且由于它被用尽,它朝向地址空间的底部(即朝向零)。
你的进程也有一堆,它位于你的进程的底端。在分配内存时,这个堆可以朝着地址空间的上端扩展。正如你所看到的,堆可能与堆栈“碰撞”(有点像构造板!!!)。
堆栈溢出的常见原因是不好的递归调用。通常,这是因为您的递归函数没有正确的终止条件,因此最终会永久调用它。然而,通过GUI编程,可以产生间接递归。例如,您的应用程序可能正在处理绘画消息,并且在处理它们时,它可能会调用一个使系统发送另一个绘画消息的功能。在这里,您没有明确地称呼自己,但是操作系统/虚拟机已经为您完成了。
要处理它们,你需要检查你的代码。如果你有自己的功能,那么检查你是否有终止条件。如果你已经检查了,而不是调用这个函数,你至少修改了一个参数,否则递归调用函数将不会有任何可见的变化,终止条件是没用的。
如果你没有明显的递归函数,那么检查一下你是否调用任何函数间接地使你的函数被调用(像上面的隐含的例子)。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is a StackOverflowError?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

80 − = 71