2016-06-14 63 views
3

我通常会花时间阅读并尝试回答Excel VBA问题,但现在我正在尝试学习C#。有人可以帮我理解为什么我的代码中倒数第二行出现StackOverflowException错误吗?
我想通过一种方法来填充数组。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(); 
     } 
    } 
} 
+5

你觉得呢'回报GenerateNumbers(); '是吗?这对了解纠正你的误解很重要。 – usr

+3

提示:无限递归 –

+7

使用'return num;'或者只是'numbers = Enumerable.Range(1,10);' – Plutonix

回答

10

你在混淆奇怪的VBA返回函数的方式与C#。要返回无限递归,这可以通过使用这种很容易地固定:

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 
    } 
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; 
+1

@Mafii谢谢你的领导。我编辑了答案。 – Twahanz

0

通过调用return GenerateNumbers()在你的函数结束时,你一遍又一遍地运行功能再次无限,因为没有办法打破递归,导致堆栈溢出。您应该改用return num

0

这是你esentially做什么:

void Main() 
{ 
    FlipPage(); 
} 

void FlipPage() 
{ 
    FlipPage(); 
} 

所以像你保持翻转该页面中的所有永恒的是金发