太多非递归方法调用后堆栈溢出
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
。
我目前正在编写一个分为许多不同 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 的原因,我可以更改什么来防止出现这种情况?
提前致谢!
如果您继续这样调用方法,将最终导致堆栈溢出。具体什么时候取决于你的筹码量。根据这个
为避免堆栈溢出,请在调用下一个方法之前使用方法 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
。