Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 在ocaml中将int类型更改为int32时出现分段错误(堆芯转储)_Debugging_Ocaml - Fatal编程技术网

Debugging 在ocaml中将int类型更改为int32时出现分段错误(堆芯转储)

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

我正在将Ocaml中的类型从
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;;