在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

链接地址: http://www.djcxy.com/p/80523.html

上一篇: Simplest ways to cause stack overflow in C#, C++ and Java

下一篇: Intended infinite recursion, no