如果不使用递归,如何引发堆栈溢出异常?
如果调用足够多的方法,则随时可能发生堆栈溢出。但是,如果在不使用递归的情况下出现堆栈溢出错误,则可能需要重新考虑您的工作方式。递归是如此简单,因为在无限循环中,您调用了大量方法。
创建StackOverflowException的最简单方法如下:
由于没有其他人提到它:
将一个ENORMOUS数组声明为局部变量。
以下内容适用于Windows,但是大多数操作系统以类似的方式实现。
每个尚未返回的方法调用都会占用一些堆栈空间。 (具有更多局部变量的方法会占用更多空间。)非常深的调用堆栈可能导致堆栈溢出。
简短回答:如果您有一个调用内部对象的对象,则将堆栈跟踪增加1。因此,如果您有1000个相互嵌套的对象,每个对象都调用其内部对象,最终将获得一个堆栈溢出。
如果您使用合理的标准库谈论C ++,我想这会起作用:
您也可以在堆栈中分配一些字节。