我什至不知道是什么导致了我的应用程序。它是什么?我创建了一个类的新实例(该类位于另一个文件中),但在我第一次调用方法时,它抛出了 StackOverFlow 异常。
我认为从逻辑上讲,唯一会引发 stackoverflow 异常的情况是,如果有人对 Jon Skeet 投了反对票。
但现在说实话,这是什么?我通过在与第一个类相同的文件中创建另一个类并使用它来为我调用方法来解决这个问题。
一般来说,堆栈溢出异常是由递归算法引起的,其中递归深度超出(通常)固定堆栈限制。这通常是算法中的错误导致的,但也可能是由于您应用算法的数据结构太“深”造成的。
这是一个有缺陷的递归的简单示例(没有特定的 PL)。
function int length(list l) {
if (empty(l)) {
return 0;
} else {
return 1 + length(l); // should be 'return 1 + length(tail(l));
}
}
在典型的编程语言中,调用任何非空列表的 length 都会导致堆栈溢出。但即使您纠正了该错误,调用长列表的方法也可能会导致堆栈溢出。
(例外情况是当您使用支持尾递归优化的语言......或更严格地说是编译器......)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)