我在int进入Ocaml的转换类型int32.我更改了StringOcaml库的一些功能(下面的代码)
external length : string -> int32 = "%string_length"
external create: int32 -> string = "caml_create_string"
external unsafe_blit : string -> int32 -> string -> int32 -> int32 -> unit
= "caml_blit_string" "noalloc"
let sub s ofs len =
if ofs < 0l or len < 0l or add ofs len > length s
then invalid_arg "String.sub"
else begin
let r = create len in
unsafe_blit s ofs r 0l len;
r
end
Run Code Online (Sandbox Code Playgroud)
请注意,我在int -> int32运行代码时更改了代码中的很多位置我收到了错误:
./xsd2coq < grammar/cpf.xsd > coq/cpf.v
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
在文件中xsd2coq.ml我有一个缓冲区是:
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;;
Run Code Online (Sandbox Code Playgroud)
我想了解产生关于分段错误的错误的原因是什么?能不能给我任何提示或建议来调试我的代码?谢谢
"%string_length"是OCaml原语.您只能通过更改OCaml代码来更改其返回类型.您还必须更改OCaml运行时中的代码.如果OCaml尝试将int值(从运行时获得的int32值)视为值,它将崩溃.的int32值是要由装箱值(指针)来表示,而是一个int值是一个立即值.
做你想做的事情要做很多工作.由于字符串的长度非常有限(至少在32位架构中),我不确定它会特别有用.
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |