我通常花时间阅读并尝试回答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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
SO *_*ood 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
}
Run Code Online (Sandbox Code Playgroud)
堆栈溢出是一种不良情况,在这种情况下,特定计算机程序试图使用比调用堆栈可用的更多内存空间。在编程中,调用栈是一个缓冲区,用来存放需要处理的请求。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
}
Run Code Online (Sandbox Code Playgroud)
问题出在返回部分。你在同一个函数中调用同一个函数,一次又一次地创建一个相同函数的堆栈......你明白了。
将其更改为
return num;
Run Code Online (Sandbox Code Playgroud)