在C#,C ++和Java中导致堆栈溢出的最简单方法
我正在看C#教程,并遇到了StackOverflowException。
叙述者使用下面的代码片段给出了这样一个例外的简单例子,
public class Employee
{
private string _name;
public string Name
{
get{ return Name; }
}
}
我在C ++和Java中寻找这种类型的简单代码的一些例子,更特别是在JavaScript中可能导致堆栈溢出。
在Java中:
public class Test {
public static void main(String[] args) {
main(args);
}
}
通常,任何不终止或迭代次数过多的递归函数都会导致此问题。
此解释是语言java,C,C ++的StackOverflowException背后的基本原因。
由于递归方法调用,Stackoverflow异常在任何语言中都是通用引发的。
假设你有一个方法正在调用自己或任何其他方法的无限递归循环,那么它会导致Stacoverflowexception。 这背后的原因是方法调用堆栈被填充,它不会适应任何其他方法调用。
方法调用堆栈看起来像这张图片。
说明 - 假设Main方法有五个语句,第三个方法调用methodA,然后main方法的执行在statement3暂停,MethosA将加载到调用堆栈中。 然后方法A调用methodB。 所以methodB也被加载到堆栈中。
所以通过这种方式无限递归调用使得调用堆栈得到填充。 所以它不能提供更多的方法。 所以它抛出StackOverflowException。
对于你的代码片段,这是由于递归方法调用:
public string Name
{
get{ return Name; }
}
您正在递归地调用Name
方法/属性。 该堆栈填满(使用父级Name
方法),直到它溢出并引发StackOverflowException
。
上一篇: Simplest ways to cause stack overflow in C#, C++ and Java