我通常花时间阅读并尝试回答Excel VBA问题,但我正在努力学习C#。有人可以帮助我理解为什么我的代码中倒数第二行会出现StackOverflowException
错误吗?
我试图通过一种方法填充数组。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] numbers = GenerateNumbers();
Console.WriteLine(numbers);
Console.ReadKey();
}
static int[] GenerateNumbers()
{
int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
return GenerateNumbers();
}
}
}
答案 0 :(得分:10)
你混淆了用C#返回函数的奇怪的VBA方式。您将返回无限递归,可以使用以下命令轻松修复:
static int[] GenerateNumbers()
{
int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
return num; //you don't return the function name but a variable
}
答案 1 :(得分:4)
堆栈溢出是一种特殊的不良条件 计算机程序试图使用比调用堆栈更多的内存空间 已有。在编程中,调用堆栈是存储的缓冲区 需要处理的请求。 http://whatis.techtarget.com/definition/stack-overflow
static int[] GenerateNumbers()
{
int[] num = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
return GenerateNumbers(); //Here is where the problem happens
}
问题在于返回部分。你在同一个函数中调用相同的函数,一次又一次地创建一个相同函数的堆栈......你得到了图片。
将其更改为
return num;
答案 2 :(得分:0)
通过在函数末尾调用return GenerateNumbers()
,您无限地一遍又一遍地运行该函数,因为无法打破递归,导致堆栈溢出。您应该使用return num
答案 3 :(得分:0)
这是你真正做的事情:
void Main()
{
FlipPage();
}
void FlipPage()
{
FlipPage();
}
所以就像那个金发女郎一样,你永远不停地翻页那个