Cyc*_*one 3 stack-overflow exception
我甚至不知道是什么原因造成了我的申请.它是什么?我创建了一个类的新实例(该类在另一个文件中),但是我第一次调用一个方法时会抛出一个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));
}
}
Run Code Online (Sandbox Code Playgroud)
调用任何非空列表的长度将使典型编程语言中的堆栈溢出.但即使您更正了错误,调用该方法的长列表也可能导致堆栈溢出.
(例外情况是当你使用一种语言......或者更严格的是一种支持尾递归优化的编译器......)
归档时间: |
|
查看次数: |
12532 次 |
最近记录: |