需要修复来自外星来源的非常庞大的 ocaml 程序。问题之一是程序在看似无辜的行崩溃:
Hashtbl.mem loc_to_no loc
“内存不足”异常。问题是那里肯定有足够的内存,并且这条线对于其他输入来说执行得很好,甚至在处理问题的过程中更早。
使用 运行它后OCAMLRUNPARAM="v=63"
,我看到在崩溃之前打印的一行:
结构比较中的堆栈溢出
所涉及的结构定义如下。 loc
是类型location
。
type ('a, 'b, 'c) automaton = {
aut_id : int ;
mutable start_location : (('a, 'b, 'c) location) option ;
mutable end_location : (('a, 'b, 'c) location) option ;
mutable aut_attributes : 'a ;
}
and ('a, 'b, 'c) location = {
loc_id : int ;
mutable succs : ('c * ('a, 'b, 'c) location) list ;
mutable preds : ('c * ('a, 'b, 'c) location) list ;
automaton : ('a, 'b, 'c) automaton ;
mutable loc_attributes : 'b ;
}
应该怎么做才能使代码执行?