我正在编写一个分为许多不同任务/方法的控制台程序。 它大致是这样的:
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的原因,我可以更改什么来防止这种情况?
提前致谢!
答案 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
。