填充数组时出现StackoverflowException

时间:2016-06-14 14:02:36

标签: c#

我通常花时间阅读并尝试回答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();
        }
    }
}

4 个答案:

答案 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();
}

所以就像那个金发女郎一样,你永远不停地翻页那个