当给出一个中等大小的文件(251MB)作为输入时,以下代码与错误core.exception.InvalidMemoryOperationError@(0)
崩溃,但是当给定小文件时则不会。
import std.stdio;
void main(string[] argv) {
foreach(line; stdin.byLine()) {}
}
我发现的所有文件[例如1,2]表示在垃圾收集周期中发生分配时会发生此错误(例如,如果在析构函数中分配内存)。但是,唯一应该在这里分配的是line
,它的类型为char[]
,可能没有析构函数。
此外,由于byLine()返回的值在调用popFront()[3]后不应该持久存在,我很好奇为什么它甚至为需要一个集合传递。使用byLine而不是byLineCopy的重点不是重用缓冲区的能力,只在必要时增长它吗?
我的编译器版本是DMD64 D Compiler v2.067.1
答案 0 :(得分:4)
这很可能是由这个错误引起的: https://issues.dlang.org/show_bug.cgi?id=13856
请尝试将您的DMD升级到当前版本,应该在那里修复。