gpt4 book ai didi

c# - StringBuilder内存不足

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:55 24 4
gpt4 key购买 nike

我正在尝试使用以下字符串对解析器进行崩溃测试:

var theWholeUTF8 = new StringBuilder();
for (char code = Char.MinValue; code <= Char.MaxValue; code++)
{
theWholeUTF8.Append(code);
}


但是,测试在构建字符串时会崩溃并抛出OutOfMemoryException。
我想念什么?

最佳答案

问题是code溢出并被0后返回到Char.MaxValue。这样,for循环就不会结束。

尝试

var theWholeUTF8 = new StringBuilder();

for (int code = Char.MinValue; code <= Char.MaxValue; code++)
{
theWholeUTF8.Append((char)code);
}


为了清楚起见...在某个时候

code = Char.MaxValue - 1

code++; // code == Char.MaxValue
is code <= Char.MaxValue? Yes
theWholeUTF8.Append((char)code);

code++; // code == 0
is code <= Char.MaxValue? Yes
theWholeUTF8.Append((char)code);

and so on!


一种可能的解决方案是为 code使用更大的变量。另一个解决方案是:

for (char code = Char.MinValue; code < Char.MaxValue; code++)
{
theWholeUTF8.Append(code);
}

theWholeUTF8.Append(Char.MaxValue);


我们在 code == Char.MaxValue处停下来,然后手动添加 Char.MaxValue

通过在添加之前移动支票获得的其他解决方案:

char code = Char.MinValue;

while (true)
{
theWholeUTF8.Append(code);

if (code == Char.MaxValue)
{
break;
}

code++;
}

关于c# - StringBuilder内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com