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

Stack Overflow after too many non-recursive Method Calls

我目前正在编写一个分为许多不同 tasks/methods 的控制台程序。 大致是这样的:

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

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

......

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

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

如果这就是我收到 Whosebug 的原因,我可以更改什么来防止出现这种情况?

提前致谢!

如果您继续这样调用方法,最终导致堆栈溢出。具体什么时候取决于你的筹码量。根据这个,是1MB。

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

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

您可以在 Main 方法中依次调用所有这些方法,而不是从 method1 内部调用 method2 并从 method2 内部调用 method3 :

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