太多非递归方法调用后堆栈溢出

时间:2018-04-21 10:50:00

标签: c# stack-overflow

我正在编写一个分为许多不同任务/方法的控制台程序。 它大致是这样的:

static void method1() {
    //do something
    method2();
}

static void method2() {
    //do something
    method3();
}

...

static void methodN() {
    //doesn't get executed because there's a StackOverflow
}

我的问题是,这最终会导致StackOverflow吗?没有递归也没有无限循环,只是每个方法都在最后运行下一个方法来保持程序运行。

如果这是我获得StackOverflow的原因,我可以更改什么来防止这种情况?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果你继续调用这样的方法,那么最终成为堆栈溢出。究竟什么时候取决于你的堆栈有多大。根据这个post,它是1MB。

为避免堆栈溢出,请在调用下一个方法之前使用方法 return 。根据你所说的,你已经将你的程序划分为方法:

static void Method1() { ... }
static void Method2() { ... }
static void Method3() { ... }
static void Method4() { ... }

您可以在method2方法中按顺序调用所有这些方法,而不是从method1内部调用method3并从method2内调用Main。 / p>

public static void Main(string[] args) {
    Method1();
    Method2();
    Method3();
    Method4();
}

这样你就不会填满筹码。

为了好玩,我写了一小段代码来找出Stack Overflow何时发生:

public static void Main(string[] args) {
    Method(1, 1);
}

static void Method(int x, int y) {
    Console.WriteLine(x);
    Method(x + 1, y + 1);
}

对我来说,它在说出堆栈溢出之前显示173897