尝试向List添加元素时抛出了类型'System.OutOfMemoryException'的异常

时间:2012-12-28 23:11:53

标签: c# out-of-memory

编辑:感谢帮助人员,我刚才意识到我的错误就是把数字=(40 / i)当它应该是数字=(数字/ i)......出于某种原因,我的数字是40我的脑袋。

第一个循环中缺少的“i ++”是我在尝试修复代码时意外删除它:P

原件:

我创建了一个方法,以整数列表的形式返回素数的素因子。但是,当我尝试用元素填充我的列表时,我收到一个错误。为什么呢?

static List<int> PrimeFactors(int number)
        {
            bool prime = false;
            List<int> primeFactors = new List<int>();
            for (int i = 2; i < number; )
            {
                if (number % i == 0)
                {
                    prime = true;
                    break;
                }
            }

            if (prime)
            {
                for (int i = 2; i < number; i++)
                {
                    if (number % i == 0)
                    {
                        primeFactors.Add(i); // <--- Error at this line.
                        number = (40 / i);
                        i = 1;
                    }
                }
                primeFactors.Add(number);
            }
            return primeFactors;
        }

2 个答案:

答案 0 :(得分:3)

在第一个循环中,您没有迭代i,所以除非number % 2 == 0,否则它将无限循环。

在第二个循环中,您正在重置i = 1然后循环。因此,如果number % 2 == 0,它将继续向列表中添加项目,直到内存不足为止。

答案 1 :(得分:0)

你得到了这个错误,因为你的第二个for循环是无穷无尽的,所以你不断添加到你的List中,并且在某个时刻你没有足够的内存来保存它。 由于i = 1,循环是无止境的;言。

另请注意,在第一个循环中有另一个问题,您在for语句末尾缺少i ++语句。