运行Dart项目时dart.exe占满内存导致项目无法运行的解决方法
Dart运行时dart.exe占满内存问题修复
问题根因
该问题由代码中的无限死循环触发:oddOrEvenNum函数内do-while循环的终止条件编写错误,循环永远无法退出,导致dart.exe进程持续消耗内存,最终占满全部系统内存使得项目无法正常运行。
具体错误点
原代码do-while逻辑存在两处核心错误:
- 循环终止条件写反:原条件为
while (number < 10),do-while会先执行循环体再判断条件,传入参数12时,第一次执行循环体后number ~/=10运算得到值1,永远满足number <10的判断条件,循环会无限重复执行。 - 位数计数逻辑冗余:循环内判断
number <10时额外给计数加1,会导致位数统计结果错误。
修复后代码
void main(List<String> arguments) async { String checkNum = oddOrEvenNum(12); print(checkNum); } String oddOrEvenNum(int number) { if (number < 10) return 'Odd digit'; else { int digitNum = 0; int temp = number; do { temp ~/= 10; digitNum++; } while (temp >= 10); digitNum++; // 补充最后剩余个位的计数 if (digitNum % 2 == 0) return 'Even number with $digitNum digits'; else return 'Odd number with $digitNum digits'; } }
验证结果
运行修复后的代码,传入参数12时,循环仅执行1次就会因temp值为1、不满足>=10的终止条件退出,最终正确统计位数为2,输出Even number with 2 digits后程序正常结束,不会再出现内存占满的问题。
日常编写循环逻辑时,写完优先验证终止条件是否能在预期输入下正常触发,可大概率避免这类无限循环导致的资源耗尽问题。
内容的提问来源于stack exchange,提问作者Công Hiến
相关产品推荐
相关产品推荐

