Debugging 在ocaml中将int类型更改为int32时出现分段错误(堆芯转储)
我正在将Ocaml中的类型从Debugging 在ocaml中将int类型更改为int32时出现分段错误(堆芯转储),debugging,ocaml,Debugging,Ocaml,我正在将Ocaml中的类型从int转换为int32。我更改了StringOcaml库的一些函数(代码如下) 在文件xsd2coq.ml中,我有一个带有is的缓冲区: let main () = let xml = parse_xml stdin in let xsds = Xsd_of_xml.xsd_of_xml xml in let b = Buffer.create 10000 in Coq_of_xsd.genr_ml b xsds; Buffer.output
int
转换为int32
。我更改了String
Ocaml库的一些函数(代码如下)
在文件xsd2coq.ml
中,我有一个带有is的缓冲区:
let main () =
let xml = parse_xml stdin in
let xsds = Xsd_of_xml.xsd_of_xml xml in
let b = Buffer.create 10000 in
Coq_of_xsd.genr_ml b xsds;
Buffer.output_buffer stdout b;;
let _ = run main;;
我想了解产生分割错误错误的原因是什么?你能给我一些提示或建议来调试我的代码吗?谢谢嗯,“%string\u length”是一个OCaml原语。您不能仅仅通过更改OCaml代码来更改其返回类型。您还必须在OCaml运行时中更改代码。如果OCaml试图将int
值(您从运行时获得的值)视为int32
值,它将崩溃。int32
值将由装箱值(指针)表示,但int
值是立即值
要想做你想做的事情,需要做很多工作。由于字符串的长度非常有限(至少在32位体系结构中),我不确定它是否特别有用。非常感谢。这有助于我理解这个问题。给这个问题的未来读者的一个提示是:如果您需要问为什么在OCaml-C接口中将
int
更改为int32
会导致分段错误,您还没有准备好使用关键字external
。
./xsd2coq < grammar/cpf.xsd > coq/cpf.v
Segmentation fault (core dumped)
let main () =
let xml = parse_xml stdin in
let xsds = Xsd_of_xml.xsd_of_xml xml in
let b = Buffer.create 10000 in
Coq_of_xsd.genr_ml b xsds;
Buffer.output_buffer stdout b;;
let _ = run main;;