【发布时间】:2017-03-09 12:28:33
【问题描述】:
我正在尝试使用 Z3 的 C/C++ API 来解析 SMTLib2 格式的定点约束(特别是 SeaHorn 生成的文件)。但是,我的应用程序在解析字符串时崩溃(我使用的是Z3_fixedpoint_from_string 方法)。我正在使用的 Z3 版本是 4.5.1 64 位版本。
我尝试解析的 SMTLib 文件与我从源代码编译的 Z3 二进制文件一起工作,但在调用 Z3_fixedpoint_from_string 时遇到分段错误。我将问题缩小到我认为问题与将关系添加到定点上下文有关的程度。下面是一个在我的机器上产生段错误的简单示例:
#include "z3.h"
int main()
{
Z3_context c = Z3_mk_context(Z3_mk_config());
Z3_fixedpoint f = Z3_mk_fixedpoint(c);
Z3_fixedpoint_from_string (c, f, "(declare-rel R ())");
Z3_del_context(c);
}
使用 valgrind 运行此代码会报告大量无效读写。所以,要么这不是 API 应该被使用的方式,要么是某个地方出现了问题。不幸的是,我找不到任何关于如何以编程方式使用定点引擎的示例。但是,例如调用 Z3_fixedpoint_from_string (c, f, "(declare-var x Int)"); 就可以了。
顺便说一句,Z3_del_fixedpoint()在哪里?
【问题讨论】:
-
没有 C/C++ 语言这种东西。您使用哪种语言?
-
该示例使用 C API,但我计划混合使用 C 和 C++ API 调用。我用 g++ 4.9 编译了这个例子。
-
我现在添加了这个,以防你和其他人可以使用它。 github.com/Z3Prover/z3/commit/…
-
谢谢!非常感谢。
标签: z3