在C#</byte>中填充List <byte>时出现OutOfMemoryException

时间:2015-03-29 08:25:47

标签: c#

我出现了内存异常,我不知道为什么? 这是我的C#代码:

List<byte> testlist = new List<byte>();
            for (byte i = 0; i <= 255; i++)
            {
                testlist.Add(i); //exception thrown here in the last cycle
            }

1 个答案:

答案 0 :(得分:11)

你的循环永远不会终止,因为byte是一个无符号的8位整数,有效值介于0到255之间。

因此,当i == 255和循环体完成时,会发生另一个增量。但是,由于byte的范围,这不会导致i等于256(它不能!),这反过来会导致循环终止。相反,它溢出,并转到0。因此,循环继续(以及开启......)。使用无符号循环计数器时,这是一个相对常见的错误。

与此同时,在您运行OOM之前,您的列表正在增长。这里没有理由使用byte;在将其添加到列表中时,只需使用int并投射i