1

示例代码:

Static void main(string[] args) { Class1 c1 = new Class1(); }

Class1 { Class1() { Class2 c2 = new Class2(); } }

Class2 { Class2() { Class1 c1 = new Class1(); } }

上面的代码抛出StackOverFlowException. 在这里,我们递归地创建Class1&对象。Class2对象是存储在Heap中的,那为什么它不抛出HeapOversizedException或者someotherException与Heap相关呢?

4

2 回答 2

8

无限递归总是导致StackOverflowException. 这不是因为对象分配,而是因为对方法的调用必须记住调用者在堆栈上的地址,并且这样做会无限地溢出堆栈。

维基百科对该过程有非常正式的描述。

于 2013-10-11T09:44:17.107 回答
3

StackOverflowException - 堆栈将用于存储当前地址并跳转到功能代码执行。然后它会在函数返回时被释放或弹出。由于您的通话永远不会结束或返回,因此堆栈不断地被地址填充并被填充。

于 2013-10-11T09:43:52.560 回答