获得无限循环问题。进程由于StackOverflowException而终止?

时间:2014-09-24 12:11:56

标签: c# exception stack-overflow infinite-loop

namespace ConsoleApplication1
{

class class1
{
    protected internal string inf1()
    {
        Console.WriteLine("\n......inf1() \n");

        return inf1();
    }
}




class class2 :class1
{
    static void Main(string[] args)
    {
        class1 c1 = new class1();

        class2 c2 = new class2();

        Console.WriteLine(c1.inf1());

        Console.WriteLine(c2.inf1());

        Console.ReadKey();
    }
}

获得无限循环问题。由于StackOverflowException

而终止了流程

如何防止代码无限循环?

2 个答案:

答案 0 :(得分:0)

class2,您正在呼叫Console.WriteLine(c1.inf1());

所以class1.inf1应该在您尝试将其输出到控制台时返回一个字符串。

但是,class1.inf1()递归调用自身而没有退出,并且不返回字符串。

所以我认为这可能是你想要完成的事情:

protected internal string inf1()
{
    return "\n......inf1() \n";
}

答案 1 :(得分:0)

问题在于:

protected internal string inf1()
{
    Console.WriteLine("\n......inf1() \n");
    return inf1();
}

此方法每次都会向自己返回一个调用,这意味着它将被无限调用。问题在于,程序在进入方法之前会向堆栈添加它所在的内存上的当前位置,这样当一个方法返回时它可以返回到该位置并从那里继续,但该堆栈不是无限的所以使用有问题的方法它会变满,然后程序崩溃,因为没有堆栈就无法继续运行。